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

zimmermann at webkit.org zimmermann at webkit.org
Wed Dec 22 15:43:50 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit bbd697ceb5e455f26cb5fb34f457af24b0c40685
Author: zimmermann at webkit.org <zimmermann at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Nov 11 11:20:11 2010 +0000

    2010-11-10  Nikolas Zimmermann  <nzimmermann at rim.com>
    
            Reviewed by Dirk Schulze.
    
            Convert SVGMatrix/SVGTransform/SVGTransformList to the new SVGPropertyTearOff concept
            https://bugs.webkit.org/show_bug.cgi?id=49311
    
            Move the last list type, SVGTransformList, and the last POD types, SVGMatrix & SVGTransform, over to the new SVGPropertyTearOff concept.
            Removes the need for a custom JSSVGMatrix/V8SVGMatrix implementation, it's all integrated within the bindings now.
    
            Tests: svg/W3C-SVG-1.1-SE/coords-dom-01-f.svg
                   svg/W3C-SVG-1.1-SE/coords-dom-02-f.svg
                   svg/W3C-SVG-1.1-SE/coords-dom-03-f.svg
                   svg/W3C-SVG-1.1-SE/coords-dom-04-f.svg
                   svg/W3C-SVG-1.1-SE/types-dom-01-b.svg
                   svg/W3C-SVG-1.1-SE/types-dom-02-f.svg
                   svg/W3C-SVG-1.1-SE/types-dom-03-b.svg
                   svg/W3C-SVG-1.1-SE/types-dom-04-b.svg
                   svg/W3C-SVG-1.1-SE/types-dom-05-b.svg
                   svg/dom/SVGMatrix.html
                   svg/dom/SVGTransform.html
                   svg/dom/SVGTransformList.html
    
            * Android.jscbindings.mk: Removed JSSVGMatrixCustom.cpp.
            * Android.v8bindings.mk: Removed V8SVGMatrixCustom.cpp.
            * CMakeLists.txt: Remove JSSVGMatrixCustom.cpp.
            * GNUmakefile.am: Ditto. Add SVGAnimatedTransformListPropertyTearOff.h/SVGStaticPropertyWithParentTearOff.h/SVGTransformListPropertyTearOff.h/SVGAnimatedTransformList.h/SVGMatrix.h to build.
            * WebCore.gypi: Ditto.
            * WebCore.pro: Ditto.
            * WebCore.vcproj/WebCore.vcproj: Ditto.
            * WebCore.xcodeproj/project.pbxproj: Ditto.
            * bindings/js/JSBindingsAllInOne.cpp: Remove JSSVGMatrixCustom.cpp
            * bindings/js/JSSVGMatrixCustom.cpp: Removed.
            * bindings/scripts/CodeGenerator.pm: Convert SVGMatrix/SVGTransform/SVGTransformList to the new concept.
            * bindings/scripts/CodeGeneratorJS.pm: Ditto.
            * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
            * bindings/scripts/CodeGeneratorV8.pm: Ditto.
            * bindings/v8/custom/V8SVGMatrixCustom.cpp: Removed.
            * svg/DeprecatedSVGAnimatedPropertyTraits.h: Remove SVGTransformList handling.
            * svg/DeprecatedSVGAnimatedTemplate.h: Ditto.
            * svg/SVGAnimateTransformElement.cpp: Adapt to SVGTransformList API changes.
            (WebCore::transformListFor):
            (WebCore::SVGAnimateTransformElement::resetToBaseValue):
            (WebCore::SVGAnimateTransformElement::calculateAnimatedValue):
            (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
            * svg/SVGAnimatedTransformList.h: Added.
            * svg/SVGGradientElement.cpp: Ditto.
            (WebCore::SVGGradientElement::SVGGradientElement):
            (WebCore::SVGGradientElement::parseMappedAttribute):
            * svg/SVGGradientElement.h: Ditto.
            * svg/SVGLinearGradientElement.cpp: Ditto.
            (WebCore::SVGLinearGradientElement::collectGradientAttributes):
            * svg/SVGMatrix.h: Added. SVGMatrix inherits from AffineTransform, and is only used in the bindings. It implements SVGs special requirements.
            (WebCore::SVGMatrix::translate): Returns a copy of the matrix, not affecting the original matrix.
            (WebCore::SVGMatrix::scale): Ditto.
            (WebCore::SVGMatrix::scaleNonUniform): Ditto.
            (WebCore::SVGMatrix::rotate): Ditto.
            (WebCore::SVGMatrix::flipX): Ditto.
            (WebCore::SVGMatrix::flipY): Ditto.
            (WebCore::SVGMatrix::skewX): Ditto.
            (WebCore::SVGMatrix::skewY): Ditto.
            (WebCore::SVGMatrix::multiply): Ditto.
            (WebCore::SVGMatrix::inverse): Ditto.
            (WebCore::SVGMatrix::rotateFromVector): Dittto.
            * svg/SVGMatrix.idl: Enable StrictTypeChecking/RequiresAllArguments=Raise on all attributes/functions.
            * svg/SVGPatternElement.cpp: Adapt to SVGTransformList API changes.
            (WebCore::SVGPatternElement::SVGPatternElement):
            (WebCore::SVGPatternElement::parseMappedAttribute):
            (WebCore::SVGPatternElement::collectPatternAttributes):
            * svg/SVGPatternElement.h: Ditto.
            * svg/SVGPoint.idl: Enable StrictTypeChecking/RequiresAllArguments=Raise for 'matrixTransform', now that SVGMatrix has been converted to the new scheme.
            * svg/SVGRadialGradientElement.cpp: Adapt to SVGTransformList API changes.
            (WebCore::SVGRadialGradientElement::collectGradientAttributes):
            * svg/SVGSVGElement.cpp: Ditto.
            (WebCore::SVGSVGElement::createSVGTransformFromMatrix):
            (WebCore::SVGSVGElement::viewBoxToViewTransform):
            * svg/SVGSVGElement.h: Ditto.
            * svg/SVGStyledTransformableElement.cpp: Ditto.
            (WebCore::SVGStyledTransformableElement::SVGStyledTransformableElement):
            (WebCore::SVGStyledTransformableElement::animatedLocalTransform):
            (WebCore::SVGStyledTransformableElement::parseMappedAttribute):
            * svg/SVGStyledTransformableElement.h: Ditto.
            * svg/SVGTextElement.cpp: Ditto.
            (WebCore::SVGTextElement::SVGTextElement):
            (WebCore::SVGTextElement::parseMappedAttribute):
            (WebCore::SVGTextElement::animatedLocalTransform):
            * svg/SVGTextElement.h: Ditto.
            * svg/SVGTransform.cpp: Modernize code, inlined some getters.
            (WebCore::SVGTransform::SVGTransform):
            (WebCore::SVGTransform::setMatrix):
            * svg/SVGTransform.h: Reindent header.
            (WebCore::SVGTransform::type):
            (WebCore::SVGTransform::svgMatrix):
            (WebCore::SVGTransform::matrix):
            (WebCore::SVGTransform::angle):
            (WebCore::SVGTransform::rotationCenter):
            (WebCore::SVGTransform::isValid):
            (WebCore::operator==): Avoid function calls, make operator== a friend of SVGTransform, and compare members directly.
            (WebCore::operator!=):
            * svg/SVGTransform.idl:
            * svg/SVGTransformList.cpp: Rewritten as plain Vector<SVGTransform>.
            (WebCore::SVGTransformList::createSVGTransformFromMatrix):
            (WebCore::SVGTransformList::consolidate):
            (WebCore::SVGTransformList::concatenate):
            (WebCore::SVGTransformList::valueAsString):
            * svg/SVGTransformList.h:
            (WebCore::SVGTransformList::SVGTransformList):
            * svg/SVGTransformList.idl: Enable StrictTypeChecking/RequiresAllArguments=Raise on all attributes/functions.
            * svg/SVGTransformable.cpp: Adapt to SVGTransformList API changes.
            (WebCore::SVGTransformable::parseTransformAttribute):
            * svg/SVGTransformable.h: Ditto.
            * svg/SVGViewSpec.cpp: Ditto.
            (WebCore::SVGViewSpec::SVGViewSpec):
            (WebCore::SVGViewSpec::setTransform):
            (WebCore::SVGViewSpec::parseViewSpec):
            * svg/SVGViewSpec.h: Ditto.
            (WebCore::SVGViewSpec::transform):
            * svg/properties/SVGAnimatedListPropertyTearOff.h: Made constructor and members protected.
            * svg/properties/SVGAnimatedPropertyMacros.h: Add new helper macro DECLARE_ANIMATED_TRANSFORM_LIST_PROPERTY. This is needed until we expand all macros.
            * svg/properties/SVGAnimatedTransformListPropertyTearOff.h: Added. Extends SVGAnimatedListPropertyTearOff, returning SVGTransformListPropertyTearOff objects.
            (WebCore::SVGAnimatedTransformListPropertyTearOff::baseVal):
            (WebCore::SVGAnimatedTransformListPropertyTearOff::animVal):
            (WebCore::SVGAnimatedTransformListPropertyTearOff::create):
            (WebCore::SVGAnimatedTransformListPropertyTearOff::SVGAnimatedTransformListPropertyTearOff):
            * svg/properties/SVGListPropertyTearOff.h: Made construct and members protected.
            * svg/properties/SVGProperty.h: Declare commitChange() as pure virtual method.
            * svg/properties/SVGPropertyTraits.h: Handle SVGTransformList.
            * svg/properties/SVGStaticPropertyWithParentTearOff.h: Added. Same concept as JSSVGStaticPODTypeWrapperWithParent, used to expose SVGPropertyTearOffs for types
                                                                   that are using this concept themselves. (SVGMatrix attribute of SVGTransform, both are POD types, using SVGPropertyTearOff).
            (WebCore::SVGStaticPropertyWithParentTearOff::create):
            (WebCore::SVGStaticPropertyWithParentTearOff::commitChange):
            (WebCore::SVGStaticPropertyWithParentTearOff::SVGStaticPropertyWithParentTearOff):
            * svg/properties/SVGTransformListPropertyTearOff.h: Added. Extends SVGListPropertyTearOff by two special SVGTransformList methods: consolidate and createSVGTransformFromMatrix.
            (WebCore::SVGTransformListPropertyTearOff::create):
            (WebCore::SVGTransformListPropertyTearOff::createSVGTransformFromMatrix):
            (WebCore::SVGTransformListPropertyTearOff::consolidate):
            (WebCore::SVGTransformListPropertyTearOff::SVGTransformListPropertyTearOff):
    2010-11-10  Nikolas Zimmermann  <nzimmermann at rim.com>
    
            Reviewed by Dirk Schulze.
    
            Convert SVGMatrix/SVGTransform/SVGTransformList to the new SVGPropertyTearOff concept
            https://bugs.webkit.org/show_bug.cgi?id=49311
    
            Add tests covering StrictTypeChecking and RequiresAllArguments=Raise for SVGMatrix/SVGPoint.
            Imported several new tests from SVG 1.1 2nd Edition, regarding SVG DOM primitives.
    
            * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.checksum: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.png: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.txt: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.checksum: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.png: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.txt: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.checksum: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.png: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.txt: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.checksum: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.png: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.txt: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.checksum: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.png: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.txt: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.checksum: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.png: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.txt: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.checksum: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.png: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.txt: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.checksum: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.png: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.checksum: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.png: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.txt: Added.
            * svg/W3C-SVG-1.1-SE/coords-dom-01-f.svg: Added.
            * svg/W3C-SVG-1.1-SE/coords-dom-02-f.svg: Added.
            * svg/W3C-SVG-1.1-SE/coords-dom-03-f.svg: Added.
            * svg/W3C-SVG-1.1-SE/coords-dom-04-f.svg: Added.
            * svg/W3C-SVG-1.1-SE/types-dom-01-b.svg: Added.
            * svg/W3C-SVG-1.1-SE/types-dom-02-f.svg: Added.
            * svg/W3C-SVG-1.1-SE/types-dom-03-b.svg: Added.
            * svg/W3C-SVG-1.1-SE/types-dom-04-b.svg: Added.
            * svg/W3C-SVG-1.1-SE/types-dom-05-b.svg: Added.
            * svg/dom/SVGMatrix-expected.txt: Added.
            * svg/dom/SVGMatrix.html: Added.
            * svg/dom/SVGPoint-expected.txt:
            * svg/dom/SVGTransform-expected.txt: Added.
            * svg/dom/SVGTransform.html: Added.
            * svg/dom/SVGTransformList-expected.txt: Added.
            * svg/dom/SVGTransformList.html: Added.
            * svg/dom/script-tests/SVGMatrix.js: Added.
            * svg/dom/script-tests/SVGPoint.js:
            * svg/dom/script-tests/SVGTransform.js: Added.
            * svg/dom/script-tests/SVGTransformList.js: Added.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71802 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index ab3a940..c2b6b0d 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,61 @@
+2010-11-10  Nikolas Zimmermann  <nzimmermann at rim.com>
+
+        Reviewed by Dirk Schulze.
+
+        Convert SVGMatrix/SVGTransform/SVGTransformList to the new SVGPropertyTearOff concept
+        https://bugs.webkit.org/show_bug.cgi?id=49311
+
+        Add tests covering StrictTypeChecking and RequiresAllArguments=Raise for SVGMatrix/SVGPoint.
+        Imported several new tests from SVG 1.1 2nd Edition, regarding SVG DOM primitives.
+
+        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.checksum: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.png: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.txt: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.checksum: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.png: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.txt: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.checksum: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.png: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.txt: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.checksum: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.png: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.txt: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.checksum: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.png: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.txt: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.checksum: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.png: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.txt: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.checksum: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.png: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.txt: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.checksum: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.png: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.checksum: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.png: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.txt: Added.
+        * svg/W3C-SVG-1.1-SE/coords-dom-01-f.svg: Added.
+        * svg/W3C-SVG-1.1-SE/coords-dom-02-f.svg: Added.
+        * svg/W3C-SVG-1.1-SE/coords-dom-03-f.svg: Added.
+        * svg/W3C-SVG-1.1-SE/coords-dom-04-f.svg: Added.
+        * svg/W3C-SVG-1.1-SE/types-dom-01-b.svg: Added.
+        * svg/W3C-SVG-1.1-SE/types-dom-02-f.svg: Added.
+        * svg/W3C-SVG-1.1-SE/types-dom-03-b.svg: Added.
+        * svg/W3C-SVG-1.1-SE/types-dom-04-b.svg: Added.
+        * svg/W3C-SVG-1.1-SE/types-dom-05-b.svg: Added.
+        * svg/dom/SVGMatrix-expected.txt: Added.
+        * svg/dom/SVGMatrix.html: Added.
+        * svg/dom/SVGPoint-expected.txt:
+        * svg/dom/SVGTransform-expected.txt: Added.
+        * svg/dom/SVGTransform.html: Added.
+        * svg/dom/SVGTransformList-expected.txt: Added.
+        * svg/dom/SVGTransformList.html: Added.
+        * svg/dom/script-tests/SVGMatrix.js: Added.
+        * svg/dom/script-tests/SVGPoint.js:
+        * svg/dom/script-tests/SVGTransform.js: Added.
+        * svg/dom/script-tests/SVGTransformList.js: Added.
+
 2010-11-11  Kent Tamura  <tkent at chromium.org>
 
         Reviewed by Shinichiro Hamaji.
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.checksum b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.checksum
new file mode 100644
index 0000000..72d6bdd
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.checksum
@@ -0,0 +1 @@
+8fd79fe9781a9bd714d37014bd4cca34
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.png b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.png
new file mode 100644
index 0000000..c4a3e47
Binary files /dev/null and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.txt
new file mode 100644
index 0000000..58f9ecb
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.txt
@@ -0,0 +1,16 @@
+layer at (0,0) size 480x360
+  RenderView at (0,0) size 480x360
+layer at (0,0) size 480x360
+  RenderSVGRoot {svg} at (0,0) size 480x360
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+    RenderSVGContainer {g} at (200,140) size 80x80
+      RenderSVGContainer {g} at (200,140) size 80x80 [transform={m=((1.00,0.00)(0.00,1.00)) t=(240.00,180.00)}]
+        RenderSVGContainer {g} at (200,140) size 80x80
+          RenderSVGPath {circle} at (200,140) size 80x80 [fill={[type=SOLID] [color=#FF0000]}] [cx=0.00] [cy=0.00] [r=40.00]
+        RenderSVGContainer {g} at (200,140) size 80x80 [transform={m=((0.00,1.00)(-1.00,0.00)) t=(0.00,0.00)}]
+          RenderSVGPath {circle} at (200,140) size 80x80 [fill={[type=SOLID] [color=#00FF00]}] [cx=0.00] [cy=0.00] [r=40.00]
+    RenderSVGContainer {g} at (10,310) size 231x37
+      RenderSVGText {text} at (10,310) size 231x37 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 231x37
+          chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 231.00: "$Revision: 1.7 $"
+    RenderSVGPath {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.checksum b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.checksum
new file mode 100644
index 0000000..a53f214
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.checksum
@@ -0,0 +1 @@
+c88d033f28473566d8d957c53222282f
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.png b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.png
new file mode 100644
index 0000000..4578dbe
Binary files /dev/null and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.txt
new file mode 100644
index 0000000..8649408
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.txt
@@ -0,0 +1,16 @@
+layer at (0,0) size 480x360
+  RenderView at (0,0) size 480x360
+layer at (0,0) size 480x360
+  RenderSVGRoot {svg} at (0,0) size 480x360
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+    RenderSVGContainer {g} at (160,140) size 160x80
+      RenderSVGContainer {g} at (160,140) size 160x80 [transform={m=((1.00,0.00)(0.00,1.00)) t=(220.00,160.00)}]
+        RenderSVGContainer {g} at (160,140) size 160x80
+          RenderSVGPath {circle} at (160,140) size 160x80 [transform={m=((2.00,0.00)(0.00,1.00)) t=(20.00,20.00)}] [fill={[type=SOLID] [color=#FF0000]}] [cx=0.00] [cy=0.00] [r=40.00]
+        RenderSVGContainer {g} at (160,140) size 160x80 [transform={m=((2.00,0.00)(0.00,1.00)) t=(20.00,20.00)}]
+          RenderSVGPath {circle} at (160,140) size 160x80 [fill={[type=SOLID] [color=#00FF00]}] [cx=0.00] [cy=0.00] [r=40.00]
+    RenderSVGContainer {g} at (10,310) size 231x37
+      RenderSVGText {text} at (10,310) size 231x37 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 231x37
+          chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 231.00: "$Revision: 1.7 $"
+    RenderSVGPath {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.checksum b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.checksum
new file mode 100644
index 0000000..bc72932
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.checksum
@@ -0,0 +1 @@
+2e347e5fe2d169ec3b91cab22df9f2c9
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.png b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.png
new file mode 100644
index 0000000..b0e8057
Binary files /dev/null and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.txt
new file mode 100644
index 0000000..77a8184
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.txt
@@ -0,0 +1,28 @@
+layer at (0,0) size 480x360
+  RenderView at (0,0) size 480x360
+layer at (0,0) size 480x360
+  RenderSVGRoot {svg} at (0,0) size 480x360
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+    RenderSVGContainer {g} at (10,17) size 392x203
+      RenderSVGText {text} at (10,17) size 392x16 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 392x16
+          chunk 1 text run 1 at (10.00,30.00) startOffset 0 endOffset 60 width 392.00: "Test that some methods taking an SVGMatrix take a copy of it"
+      RenderSVGPath {rect} at (10,50) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [x=10.00] [y=50.00] [width=50.00] [height=50.00]
+      RenderSVGPath {rect} at (10,110) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [x=10.00] [y=110.00] [width=50.00] [height=50.00]
+      RenderSVGPath {rect} at (10,170) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [x=10.00] [y=170.00] [width=50.00] [height=50.00]
+      RenderSVGContainer {g} at (70,70) size 240x132
+        RenderSVGText {text} at (70,70) size 240x12 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 240x12
+            chunk 1 text run 1 at (70.00,80.00) startOffset 0 endOffset 47 width 240.00: "SVGTransformList.createSVGTransformFromMatrix()"
+        RenderSVGText {text} at (70,130) size 238x12 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 238x12
+            chunk 1 text run 1 at (70.00,140.00) startOffset 0 endOffset 44 width 238.00: "SVGSVGElement.createSVGTransformFromMatrix()"
+        RenderSVGText {text} at (70,190) size 118x12 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 118x12
+            chunk 1 text run 1 at (70.00,200.00) startOffset 0 endOffset 24 width 118.00: "SVGTransform.setMatrix()"
+      RenderSVGContainer {g} at (0,0) size 0x0 [transform={m=((3.00,0.00)(0.00,1.00)) t=(0.00,0.00)}]
+    RenderSVGContainer {g} at (10,310) size 231x37
+      RenderSVGText {text} at (10,310) size 231x37 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 231x37
+          chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 231.00: "$Revision: 1.7 $"
+    RenderSVGPath {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.checksum b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.checksum
new file mode 100644
index 0000000..cb9379a
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.checksum
@@ -0,0 +1 @@
+258dc3d456ef36aca814c3c9d7994f1f
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.png b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.png
new file mode 100644
index 0000000..ba4b20e
Binary files /dev/null and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.txt
new file mode 100644
index 0000000..21dc933
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.txt
@@ -0,0 +1,66 @@
+layer at (0,0) size 480x360
+  RenderView at (0,0) size 480x360
+layer at (0,0) size 480x360
+  RenderSVGRoot {svg} at (0,0) size 480x360
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+    RenderSVGContainer {g} at (19,33) size 179x261
+      RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+      RenderSVGContainer {g} at (19,33) size 179x261 [transform={m=((1.00,0.00)(0.00,1.00)) t=(20.00,-10.00)}]
+        RenderSVGContainer {g} at (19,33) size 179x261 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,40.00)}]
+          RenderSVGPath {rect} at (19,34) size 17x17 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=5.00] [width=15.00] [height=15.00]
+          RenderSVGText {text} at (20,3) size 139x21 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 139x21
+              chunk 1 text run 1 at (20.00,20.00) startOffset 0 endOffset 17 width 139.00: "Scripting enabled"
+          RenderSVGPath {rect} at (19,54) size 17x17 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=25.00] [width=15.00] [height=15.00]
+          RenderSVGText {text} at (20,23) size 148x21 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 148x21
+              chunk 1 text run 1 at (20.00,40.00) startOffset 0 endOffset 17 width 148.00: "Passed subtest #1"
+          RenderSVGPath {rect} at (19,74) size 17x17 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=45.00] [width=15.00] [height=15.00]
+          RenderSVGText {text} at (20,43) size 148x21 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 148x21
+              chunk 1 text run 1 at (20.00,60.00) startOffset 0 endOffset 17 width 148.00: "Passed subtest #2"
+          RenderSVGPath {rect} at (19,94) size 17x17 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=65.00] [width=15.00] [height=15.00]
+          RenderSVGText {text} at (20,63) size 148x21 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 148x21
+              chunk 1 text run 1 at (20.00,80.00) startOffset 0 endOffset 17 width 148.00: "Passed subtest #3"
+          RenderSVGPath {rect} at (19,114) size 17x17 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=85.00] [width=15.00] [height=15.00]
+          RenderSVGText {text} at (20,83) size 148x21 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 148x21
+              chunk 1 text run 1 at (20.00,100.00) startOffset 0 endOffset 17 width 148.00: "Passed subtest #4"
+          RenderSVGPath {rect} at (19,134) size 17x17 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=105.00] [width=15.00] [height=15.00]
+          RenderSVGText {text} at (20,103) size 148x21 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 148x21
+              chunk 1 text run 1 at (20.00,120.00) startOffset 0 endOffset 17 width 148.00: "Passed subtest #5"
+          RenderSVGPath {rect} at (19,154) size 17x17 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=125.00] [width=15.00] [height=15.00]
+          RenderSVGText {text} at (20,123) size 148x21 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 148x21
+              chunk 1 text run 1 at (20.00,140.00) startOffset 0 endOffset 17 width 148.00: "Passed subtest #6"
+          RenderSVGPath {rect} at (19,174) size 17x17 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=145.00] [width=15.00] [height=15.00]
+          RenderSVGText {text} at (20,143) size 148x21 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 148x21
+              chunk 1 text run 1 at (20.00,160.00) startOffset 0 endOffset 17 width 148.00: "Passed subtest #7"
+          RenderSVGPath {rect} at (19,194) size 17x17 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=165.00] [width=15.00] [height=15.00]
+          RenderSVGText {text} at (20,163) size 148x21 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 148x21
+              chunk 1 text run 1 at (20.00,180.00) startOffset 0 endOffset 17 width 148.00: "Passed subtest #8"
+          RenderSVGPath {rect} at (19,214) size 17x17 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=185.00] [width=15.00] [height=15.00]
+          RenderSVGText {text} at (20,183) size 148x21 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 148x21
+              chunk 1 text run 1 at (20.00,200.00) startOffset 0 endOffset 17 width 148.00: "Passed subtest #9"
+          RenderSVGPath {rect} at (19,234) size 17x17 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=205.00] [width=15.00] [height=15.00]
+          RenderSVGText {text} at (20,203) size 158x21 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 158x21
+              chunk 1 text run 1 at (20.00,220.00) startOffset 0 endOffset 18 width 158.00: "Passed subtest #10"
+          RenderSVGPath {rect} at (19,254) size 17x17 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=225.00] [width=15.00] [height=15.00]
+          RenderSVGText {text} at (20,223) size 158x21 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 158x21
+              chunk 1 text run 1 at (20.00,240.00) startOffset 0 endOffset 18 width 158.00: "Passed subtest #11"
+          RenderSVGPath {rect} at (19,274) size 17x17 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=245.00] [width=15.00] [height=15.00]
+          RenderSVGText {text} at (20,243) size 158x21 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 158x21
+              chunk 1 text run 1 at (20.00,260.00) startOffset 0 endOffset 18 width 158.00: "Passed subtest #12"
+    RenderSVGContainer {g} at (10,310) size 231x37
+      RenderSVGText {text} at (10,310) size 231x37 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 231x37
+          chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 231.00: "$Revision: 1.5 $"
+    RenderSVGPath {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.checksum b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.checksum
new file mode 100644
index 0000000..7333c4e
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.checksum
@@ -0,0 +1 @@
+25956c72537d152c485b50b8561dad57
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.png b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.png
new file mode 100644
index 0000000..7d694e4
Binary files /dev/null and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.txt
new file mode 100644
index 0000000..899d3de
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.txt
@@ -0,0 +1,39 @@
+layer at (0,0) size 480x360
+  RenderView at (0,0) size 480x360
+layer at (0,0) size 480x360
+  RenderSVGRoot {svg} at (0,0) size 480x360
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+    RenderSVGContainer {g} at (10,8) size 365x295
+      RenderSVGContainer {g} at (10,8) size 365x295
+        RenderSVGContainer {g} at (16,8) size 359x157 [transform={m=((1.00,0.00)(0.00,1.00)) t=(70.00,-60.00)}]
+          RenderSVGText {text} at (30,132) size 344x23 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 344x23
+              chunk 1 text run 1 at (30.00,150.00) startOffset 0 endOffset 37 width 344.00: "Rotated Text for testing SVGLocatable"
+          RenderSVGText {text} at (100,112) size 304x23 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 304x23
+              chunk 1 text run 1 at (100.00,130.00) startOffset 0 endOffset 35 width 304.00: "Some other text with id 'otherText'"
+          RenderSVGViewportContainer {svg} at (275,45) size 100x100
+            RenderSVGPath {circle} at (275,45) size 100x100 [fill={[type=SOLID] [color=#0000FF]}] [cx=0.00] [cy=0.00] [r=50.00]
+        RenderSVGText {text} at (10,189) size 280x14 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 280x14
+            chunk 1 text run 1 at (10.00,200.00) startOffset 0 endOffset 50 width 280.00: ".getScreenCTM(): 0.42,0.42,-0.42,0.42,70.00,-60.00"
+        RenderSVGText {text} at (10,209) size 241x14 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 241x14
+            chunk 1 text run 1 at (10.00,220.00) startOffset 0 endOffset 44 width 241.00: ".getCTM(): 0.42,0.42,-0.42,0.42,70.00,-60.00"
+        RenderSVGText {text} at (10,229) size 311x14 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 311x14
+            chunk 1 text run 1 at (10.00,240.00) startOffset 0 endOffset 56 width 311.00: ".getTransformToElement(): 0.42,0.42,-0.42,0.42,0.00,0.00"
+        RenderSVGText {text} at (10,249) size 345x14 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 345x14
+            chunk 1 text run 1 at (10.00,260.00) startOffset 0 endOffset 65 width 345.00: ".getBBox() for 'blueCircle': .x=-50,.y=-50,.width=100,.height=100"
+        RenderSVGText {text} at (10,269) size 259x14 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 259x14
+            chunk 1 text run 1 at (10.00,280.00) startOffset 0 endOffset 47 width 259.00: ".farthestViewportElement of blueCircle=svg-root"
+        RenderSVGText {text} at (10,289) size 278x14 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 278x14
+            chunk 1 text run 1 at (10.00,300.00) startOffset 0 endOffset 47 width 278.00: ".nearestViewportElement of blueCircle=nestedSVG"
+    RenderSVGContainer {g} at (10,310) size 231x37
+      RenderSVGText {text} at (10,310) size 231x37 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 231x37
+          chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 231.00: "$Revision: 1.6 $"
+    RenderSVGPath {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.checksum b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.checksum
new file mode 100644
index 0000000..0cf5de7
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.checksum
@@ -0,0 +1 @@
+2bf592766edbf0a467f15d87c2c92bb1
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.png b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.png
new file mode 100644
index 0000000..3059aff
Binary files /dev/null and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.txt
new file mode 100644
index 0000000..c0fa374
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.txt
@@ -0,0 +1,52 @@
+layer at (0,0) size 480x360
+  RenderView at (0,0) size 480x360
+layer at (0,0) size 480x360
+  RenderSVGRoot {svg} at (0,0) size 480x360
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+    RenderSVGContainer {g} at (49,38) size 391x254
+      RenderSVGText {text} at (49,38) size 161x21 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 161x21
+          chunk 1 (end anchor) text run 1 at (49.00,55.00) startOffset 0 endOffset 19 width 161.00: "animVal != baseVal:"
+      RenderSVGContainer {g} at (240,40) size 200x252 [transform={m=((0.00,1.00)(-1.00,0.00)) t=(500.00,0.00)}]
+        RenderSVGPath {rect} at (420,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=60.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,62) size 162x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 162x16
+            chunk 1 text run 1 at (70.00,75.00) startOffset 0 endOffset 21 width 162.00: "SVGAnimatedNumberList"
+        RenderSVGPath {rect} at (390,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=90.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,92) size 133x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 133x16
+            chunk 1 text run 1 at (70.00,105.00) startOffset 0 endOffset 17 width 133.00: "SVGAnimatedLength"
+        RenderSVGPath {rect} at (360,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=120.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,122) size 155x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 155x16
+            chunk 1 text run 1 at (70.00,135.00) startOffset 0 endOffset 21 width 155.00: "SVGAnimatedLengthList"
+        RenderSVGPath {rect} at (330,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=150.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,152) size 125x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 125x16
+            chunk 1 text run 1 at (70.00,165.00) startOffset 0 endOffset 16 width 125.00: "SVGAnimatedAngle"
+        RenderSVGPath {rect} at (300,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=180.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,182) size 118x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 118x16
+            chunk 1 text run 1 at (70.00,195.00) startOffset 0 endOffset 15 width 118.00: "SVGAnimatedRect"
+        RenderSVGPath {rect} at (270,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=210.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,212) size 177x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 177x16
+            chunk 1 text run 1 at (70.00,225.00) startOffset 0 endOffset 24 width 177.00: "SVGAnimatedTransformList"
+        RenderSVGPath {rect} at (240,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=240.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,242) size 222x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 222x16
+            chunk 1 text run 1 at (70.00,255.00) startOffset 0 endOffset 30 width 222.00: "SVGAnimatedPreserveAspectRatio"
+      RenderSVGHiddenContainer {g} at (0,0) size 0x0
+        RenderSVGText {text} at (0,-17) size 38x26 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 38x26
+            chunk 1 text run 1 at (0.00,0.00) startOffset 0 endOffset 1 width 10.00: "a"
+            chunk 1 text run 2 at (10.00,0.00) startOffset 1 endOffset 2 width 10.00: "b"
+            chunk 1 text run 3 at (20.00,0.00) startOffset 2 endOffset 3 width 9.00: "c"
+        RenderSVGPath {circle} at (0,0) size 50x50 [fill={[type=SOLID] [color=#000000]}] [cx=0.00] [cy=0.00] [r=50.00]
+        RenderSVGResourceMarker {marker} [id="marker"] [markerUnits=strokeWidth] [ref at (0,0)] [angle=90.00]
+        RenderSVGViewportContainer {svg} at (0,0) size 0x0
+    RenderSVGContainer {g} at (10,310) size 231x37
+      RenderSVGText {text} at (10,310) size 231x37 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 231x37
+          chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 231.00: "$Revision: 1.8 $"
+    RenderSVGPath {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.checksum b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.checksum
new file mode 100644
index 0000000..ed3c2cb
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.checksum
@@ -0,0 +1 @@
+6f1abdce08d52a0e07c5153d3fca804e
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.png b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.png
new file mode 100644
index 0000000..dad6542
Binary files /dev/null and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.txt
new file mode 100644
index 0000000..8e6a7e1
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.txt
@@ -0,0 +1,18 @@
+layer at (0,0) size 480x360
+  RenderView at (0,0) size 480x360
+layer at (0,0) size 480x360
+  RenderSVGRoot {svg} at (0,0) size 480x360
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+    RenderSVGContainer {g} at (10,13) size 470x347
+      RenderSVGText {text} at (10,13) size 346x21 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 346x21
+          chunk 1 text run 1 at (10.00,30.00) startOffset 0 endOffset 40 width 346.00: "Test that getBBox() works before SVGLoad"
+      RenderSVGPath {rect} at (10,40) size 50x50 [fill={[type=SOLID] [color=#008000]}] [x=10.00] [y=40.00] [width=50.00] [height=50.00]
+      RenderSVGText {text} at (1000,983) size 31x21 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 31x21
+          chunk 1 text run 1 at (1000.00,1000.00) startOffset 0 endOffset 3 width 31.00: "Abc"
+    RenderSVGContainer {g} at (10,310) size 231x37
+      RenderSVGText {text} at (10,310) size 231x37 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 231x37
+          chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 231.00: "$Revision: 1.7 $"
+    RenderSVGPath {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.checksum b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.checksum
new file mode 100644
index 0000000..b5fc17a
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.checksum
@@ -0,0 +1 @@
+dfc0a9a72238773656a655694b96b85d
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.png b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.png
new file mode 100644
index 0000000..d059986
Binary files /dev/null and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
new file mode 100644
index 0000000..661d920
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt
@@ -0,0 +1,74 @@
+layer at (0,0) size 480x360
+  RenderView at (0,0) size 480x360
+layer at (0,0) size 480x360
+  RenderSVGRoot {svg} at (0,0) size 480x360
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+    RenderSVGContainer {g} at (10,13) size 430x279
+      RenderSVGText {text} at (10,13) size 301x21 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 301x21
+          chunk 1 text run 1 at (10.00,30.00) startOffset 0 endOffset 35 width 301.00: "Testing liveness of SVG DOM objects"
+      RenderSVGContainer {g} at (90,40) size 350x252 [transform={m=((0.00,1.00)(-1.00,0.00)) t=(500.00,0.00)}]
+        RenderSVGPath {rect} at (420,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=60.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,62) size 162x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 162x16
+            chunk 1 text run 1 at (70.00,75.00) startOffset 0 endOffset 21 width 162.00: "SVGAnimatedNumberList"
+        RenderSVGPath {rect} at (390,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=90.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,92) size 133x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 133x16
+            chunk 1 text run 1 at (70.00,105.00) startOffset 0 endOffset 17 width 133.00: "SVGAnimatedLength"
+        RenderSVGPath {rect} at (360,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=120.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,122) size 155x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 155x16
+            chunk 1 text run 1 at (70.00,135.00) startOffset 0 endOffset 21 width 155.00: "SVGAnimatedLengthList"
+        RenderSVGPath {rect} at (330,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=150.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,152) size 125x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 125x16
+            chunk 1 text run 1 at (70.00,165.00) startOffset 0 endOffset 16 width 125.00: "SVGAnimatedAngle"
+        RenderSVGPath {rect} at (300,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=180.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,182) size 118x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 118x16
+            chunk 1 text run 1 at (70.00,195.00) startOffset 0 endOffset 15 width 118.00: "SVGAnimatedRect"
+        RenderSVGPath {rect} at (270,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=210.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,212) size 177x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 177x16
+            chunk 1 text run 1 at (70.00,225.00) startOffset 0 endOffset 24 width 177.00: "SVGAnimatedTransformList"
+        RenderSVGPath {rect} at (240,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=240.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,242) size 222x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 222x16
+            chunk 1 text run 1 at (70.00,255.00) startOffset 0 endOffset 30 width 222.00: "SVGAnimatedPreserveAspectRatio"
+        RenderSVGPath {rect} at (210,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=270.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,272) size 141x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 141x16
+            chunk 1 text run 1 at (70.00,285.00) startOffset 0 endOffset 18 width 141.00: "SVGAnimatedBoolean"
+        RenderSVGPath {rect} at (180,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=300.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,302) size 126x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 126x16
+            chunk 1 text run 1 at (70.00,315.00) startOffset 0 endOffset 17 width 126.00: "SVGAnimatedString"
+        RenderSVGPath {rect} at (150,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=330.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,332) size 170x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 170x16
+            chunk 1 text run 1 at (70.00,345.00) startOffset 0 endOffset 22 width 170.00: "SVGAnimatedEnumeration"
+        RenderSVGPath {rect} at (120,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=360.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,362) size 134x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 134x16
+            chunk 1 text run 1 at (70.00,375.00) startOffset 0 endOffset 18 width 134.00: "SVGAnimatedInteger"
+        RenderSVGPath {rect} at (90,40) size 20x20 [fill={[type=SOLID] [color=#008000]}] [x=40.00] [y=390.00] [width=20.00] [height=20.00]
+        RenderSVGText {text} at (70,392) size 140x16 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 140x16
+            chunk 1 text run 1 at (70.00,405.00) startOffset 0 endOffset 17 width 140.00: "SVGAnimatedNumber"
+      RenderSVGHiddenContainer {g} at (0,0) size 0x0
+        RenderSVGText {text} at (10,-17) size 35x25 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 35x25
+            chunk 1 text run 1 at (10.00,0.00) startOffset 0 endOffset 1 width 10.00: "a"
+            chunk 1 text run 2 at (20.00,0.00) startOffset 1 endOffset 2 width 10.00: "b"
+            chunk 1 text run 3 at (30.00,0.00) startOffset 2 endOffset 3 width 9.00: "c"
+        RenderSVGPath {circle} at (0,0) size 100x100 [fill={[type=SOLID] [color=#000000]}] [cx=0.00] [cy=0.00] [r=100.00]
+        RenderSVGResourceMarker {marker} [id="marker"] [markerUnits=strokeWidth] [ref at (0,0)] [angle=60.00]
+        RenderSVGViewportContainer {svg} at (0,0) size 0x0
+        RenderSVGResourceFilter {filter} [id=""] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
+          [feTurbulence type="TURBULANCE" baseFrequency="4.00, 5.00" seed="0.00" numOctaves="1" stitchTiles="0"]
+    RenderSVGContainer {g} at (10,310) size 231x37
+      RenderSVGText {text} at (10,310) size 231x37 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 231x37
+          chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 231.00: "$Revision: 1.7 $"
+    RenderSVGPath {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.checksum b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.checksum
new file mode 100644
index 0000000..d3fac77
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.checksum
@@ -0,0 +1 @@
+f5fb7b810d10db343299888950fb87f9
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.png b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.png
new file mode 100644
index 0000000..3de6416
Binary files /dev/null and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.txt
new file mode 100644
index 0000000..66c39c0
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.txt
@@ -0,0 +1,31 @@
+layer at (0,0) size 480x360
+  RenderView at (0,0) size 480x360
+layer at (0,0) size 480x360
+  RenderSVGRoot {svg} at (0,0) size 480x360
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+    RenderSVGContainer {g} at (10,13) size 368x177
+      RenderSVGText {text} at (10,13) size 368x21 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 368x21
+          chunk 1 text run 1 at (10.00,30.00) startOffset 0 endOffset 47 width 368.00: "Test side effects of assigning to valueAsString"
+      RenderSVGPath {rect} at (10,40) size 30x30 [fill={[type=SOLID] [color=#008000]}] [x=10.00] [y=40.00] [width=30.00] [height=30.00]
+      RenderSVGPath {rect} at (10,80) size 30x30 [fill={[type=SOLID] [color=#008000]}] [x=10.00] [y=80.00] [width=30.00] [height=30.00]
+      RenderSVGPath {rect} at (10,120) size 30x30 [fill={[type=SOLID] [color=#008000]}] [x=10.00] [y=120.00] [width=30.00] [height=30.00]
+      RenderSVGPath {rect} at (10,160) size 30x30 [fill={[type=SOLID] [color=#008000]}] [x=10.00] [y=160.00] [width=30.00] [height=30.00]
+      RenderSVGContainer {g} at (50,46) size 182x137
+        RenderSVGText {text} at (50,46) size 172x17 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 172x17
+            chunk 1 text run 1 at (50.00,60.00) startOffset 0 endOffset 25 width 172.00: "Valid string on SVGLength"
+        RenderSVGText {text} at (50,86) size 182x17 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 182x17
+            chunk 1 text run 1 at (50.00,100.00) startOffset 0 endOffset 27 width 182.00: "Invalid string on SVGLength"
+        RenderSVGText {text} at (50,126) size 165x17 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 165x17
+            chunk 1 text run 1 at (50.00,140.00) startOffset 0 endOffset 24 width 165.00: "Valid string on SVGAngle"
+        RenderSVGText {text} at (50,166) size 175x17 contains 1 chunk(s)
+          RenderSVGInlineText {#text} at (0,0) size 175x17
+            chunk 1 text run 1 at (50.00,180.00) startOffset 0 endOffset 26 width 175.00: "Invalid string on SVGAngle"
+    RenderSVGContainer {g} at (10,310) size 231x37
+      RenderSVGText {text} at (10,310) size 231x37 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 231x37
+          chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 231.00: "$Revision: 1.6 $"
+    RenderSVGPath {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
diff --git a/LayoutTests/svg/W3C-SVG-1.1-SE/coords-dom-01-f.svg b/LayoutTests/svg/W3C-SVG-1.1-SE/coords-dom-01-f.svg
new file mode 100644
index 0000000..4f7d7bd
--- /dev/null
+++ b/LayoutTests/svg/W3C-SVG-1.1-SE/coords-dom-01-f.svg
@@ -0,0 +1,115 @@
+<svg id="svg-root" width="100%" height="100%" 
+  viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg" 
+  xmlns:xlink="http://www.w3.org/1999/xlink">
+  <!--======================================================================-->
+  <!--=  Copyright 2008 World Wide Web Consortium, (Massachusetts          =-->
+  <!--=  Institute of Technology, European Research Consortium for         =-->
+  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
+  <!--=  All Rights Reserved.                                              =-->
+  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
+  <!--======================================================================-->
+  <d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
+    template-version="1.4" reviewer="CM" author="ED" status="accepted"
+    version="$Revision: 1.7 $" testname="$RCSfile: coords-dom-01-f.svg,v $">
+    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/coords.html#DOMInterfaces">
+      <p>
+        Tests the liveness of SVGTransform.matrix.
+      </p>
+    </d:testDescription>
+    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        Load the svg, you should see a green circle.
+      </p>
+    </d:operatorScript>
+    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        The test has passed if:
+      </p>
+      <ul>
+        <li>There is no red visible</li>
+        <li>There is a green circle visible</li>
+      </ul>
+    </d:passCriteria>
+  </d:SVGTestCase>
+  <title id="test-title">$RCSfile: coords-dom-01-f.svg,v $</title>
+  <defs>
+    <font-face
+      font-family="SVGFreeSansASCII"
+      unicode-range="U+0-7F">
+      <font-face-src>
+        <font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
+      </font-face-src>
+    </font-face>
+  </defs>
+  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
+    
+    
+    <g transform="translate(240 180)">
+      <g id="reference">
+        <circle r="40" fill="red"/>
+      </g>
+    
+      <g id="g" transform="translate(20 20)">
+        <circle id="c" r="40" fill="blue"/>
+      </g>
+    </g>   
+    
+    <script type="text/ecmascript"><![CDATA[
+      var eps = 1 / 65535; // 16.16 fixpoint epsilon
+      var passed = false;
+      
+      function isequal( value, expected, epsilon )
+      {
+        return(Math.abs(value - expected) < epsilon);
+      }
+ 
+      try
+      {
+        var g = document.getElementById("g");
+        var c = document.getElementById("c");
+        var tfm = g.transform.baseVal.getItem(0);
+        var mtx = tfm.matrix;
+        tfm.setTranslate(300,200);
+        if(tfm.type == SVGTransform.SVG_TRANSFORM_TRANSLATE &&
+           isequal(mtx.e, 300, eps) && isequal(mtx.f, 200, eps))
+        {
+          tfm.setScale(4,4);
+          if(tfm.type == SVGTransform.SVG_TRANSFORM_SCALE &&
+             isequal(mtx.a, 4, eps) && isequal(mtx.d, 4, eps))
+          {
+            tfm.setRotate(90,0,0);
+            if(tfm.type == SVGTransform.SVG_TRANSFORM_ROTATE &&
+               isequal(mtx.a, Math.cos(Math.PI/2), eps) && isequal(mtx.b, Math.sin(Math.PI/2), eps) &&
+               isequal(mtx.c, -Math.sin(Math.PI/2), eps) && isequal(mtx.d, Math.cos(Math.PI/2), eps) &&
+               isequal(mtx.e, 0, eps) && isequal(mtx.f, 0, eps))
+            {
+              passed = true;
+            }
+          }
+        }
+      }
+      catch(e) {}
+      
+      if(passed)
+      {
+        c.setAttribute("fill", "lime");
+      }
+      else
+      {
+        c.setAttribute("fill", "red");
+      }
+    ]]></script>
+        
+  </g>
+  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
+  <text id="revision" x="10" y="340" stroke="none" 
+    fill="black">$Revision: 1.7 $</text>
+  </g>
+  <rect xml:id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
+  <!-- comment out this watermark once the test is approved --><!--
+  <g id="draft-watermark">
+    <rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
+    <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240" 
+      text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
+  </g>-->
+</svg>
diff --git a/LayoutTests/svg/W3C-SVG-1.1-SE/coords-dom-02-f.svg b/LayoutTests/svg/W3C-SVG-1.1-SE/coords-dom-02-f.svg
new file mode 100644
index 0000000..7222847
--- /dev/null
+++ b/LayoutTests/svg/W3C-SVG-1.1-SE/coords-dom-02-f.svg
@@ -0,0 +1,96 @@
+<svg id="svg-root" width="100%" height="100%" 
+  viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg" 
+  xmlns:xlink="http://www.w3.org/1999/xlink">
+  <!--======================================================================-->
+  <!--=  Copyright 2008 World Wide Web Consortium, (Massachusetts          =-->
+  <!--=  Institute of Technology, European Research Consortium for         =-->
+  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
+  <!--=  All Rights Reserved.                                              =-->
+  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
+  <!--======================================================================-->
+  <d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
+    template-version="1.4" reviewer="CM" author="ED" status="accepted"
+    version="$Revision: 1.7 $" testname="$RCSfile: coords-dom-02-f.svg,v $">
+    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/coords.html#InterfaceSVGTransform">
+        <p>
+          Tests the liveness of SVGTransform.matrix, that the SVGTransform object is updated when the SVGTransform.matrix object is changed.
+        </p>
+    </d:testDescription>
+    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        Run the test. No interaction required.
+      </p>
+    </d:operatorScript>
+    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        The test has passed if:
+      </p>
+      <ul>
+        <li>There is no red visible</li>
+        <li>There is a green ellipse visible</li>
+      </ul>
+    </d:passCriteria>
+  </d:SVGTestCase>
+  <title id="test-title">$RCSfile: coords-dom-02-f.svg,v $</title>
+  <defs>
+    <font-face
+      font-family="SVGFreeSansASCII"
+      unicode-range="U+0-7F">
+      <font-face-src>
+        <font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
+      </font-face-src>
+    </font-face>
+  </defs>
+  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
+    
+    
+    <g transform="translate(220 160)">
+      <g id="reference">
+        <circle r="40" fill="red" transform="translate(20 20) scale(2 1)"/>
+      </g>
+    
+      <g id="g" transform="translate(20 20)">
+        <circle id="c" r="40" fill="blue"/>
+      </g>
+    </g>   
+    
+    <script type="text/ecmascript"><![CDATA[
+      var passed = false;
+      
+      try
+      {
+        var g = document.getElementById("g");
+        var c = document.getElementById("c");
+        var tfm = g.transform.baseVal.getItem(0);
+        var mtx = tfm.matrix;
+        mtx.a = 2;
+        if(tfm.type == SVGTransform.SVG_TRANSFORM_MATRIX)
+        {
+          passed = true;
+        }
+      }
+      catch(e) {}
+      
+      if(passed)
+      {
+        c.setAttribute("fill", "lime");
+      }
+      else
+      {
+        c.setAttribute("fill", "red");
+      }
+    ]]></script>
+        
+  </g>
+  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
+  <text id="revision" x="10" y="340" stroke="none" 
+    fill="black">$Revision: 1.7 $</text>
+  </g>
+  <rect xml:id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
+  <!-- comment out this watermark once the test is approved --><!--
+  <g id="draft-watermark">
+    <rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
+    <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240" 
+      text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
+  </g>-->
+</svg>
diff --git a/LayoutTests/svg/W3C-SVG-1.1-SE/coords-dom-03-f.svg b/LayoutTests/svg/W3C-SVG-1.1-SE/coords-dom-03-f.svg
new file mode 100644
index 0000000..b44d16c
--- /dev/null
+++ b/LayoutTests/svg/W3C-SVG-1.1-SE/coords-dom-03-f.svg
@@ -0,0 +1,116 @@
+<svg id="svg-root" width="100%" height="100%"
+  viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg"
+  xmlns:xlink="http://www.w3.org/1999/xlink">
+  <!--======================================================================-->
+  <!--=  Copyright 2008 World Wide Web Consortium, (Massachusetts          =-->
+  <!--=  Institute of Technology, European Research Consortium for         =-->
+  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
+  <!--=  All Rights Reserved.                                              =-->
+  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
+  <!--======================================================================-->
+  <d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
+    template-version="1.3" reviewer="ED" author="CM" status="accepted"
+    version="$Revision: 1.7 $" testname="$RCSfile: coords-dom-03-f.svg,v $">
+    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/coords.html#InterfaceSVGTransformList">
+        <p>
+          This tests that SVGTransformList.createSVGTransformFromMatrix(),
+          SVGSVGElement.createSVGTransformFromMatrix() and SVGTransform.setMatrix()
+          all do not track changes to the SVGMatrix passed to them.
+        </p>
+        <p>
+        After loading the test, three rectangles will be presented.  The
+        upper rectangle indicates the result of testing whether
+        SVGTransformList.createSVGTransformFromMatrix() behaved correctly,
+        the middle rectangle indicates the status for SVGSVGElement.createSVGTransformFromMatrix(),
+        and the bottom rectangle for SVGTransform.setMatrix().
+      </p>
+    </d:testDescription>
+    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        Run the test. No interaction required.
+      </p>
+    </d:operatorScript>
+    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        The test is passed if the three rectangles are green.
+      </p>
+    </d:passCriteria>
+  </d:SVGTestCase>
+  <title id="test-title">$RCSfile: coords-dom-03-f.svg,v $</title>
+  <defs>
+    <font-face
+      font-family="SVGFreeSansASCII"
+      unicode-range="U+0-7F">
+      <font-face-src>
+        <font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
+      </font-face-src>
+    </font-face>
+  </defs>
+  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
+
+    <text x='10' y='30' font-size='14'>Test that some methods taking an SVGMatrix take a copy of it</text>
+
+    <rect id='r1' x='10' y='50' width='50' height='50'/>
+    <rect id='r2' x='10' y='110' width='50' height='50'/>
+    <rect id='r3' x='10' y='170' width='50' height='50'/>
+    <g font-size='10'>
+      <text x='70' y='80'>SVGTransformList.createSVGTransformFromMatrix()</text>
+      <text x='70' y='140'>SVGSVGElement.createSVGTransformFromMatrix()</text>
+      <text x='70' y='200'>SVGTransform.setMatrix()</text>
+    </g>
+
+    <g id='g' transform='scale(5)'/>
+
+    <script><![CDATA[
+      var svg = document.documentElement,
+          g = document.getElementById('g'),
+          r1 = document.getElementById('r1'),
+          r2 = document.getElementById('r2'),
+          r3 = document.getElementById('r3');
+
+      var m1 = svg.createSVGMatrix(),
+          m2 = svg.createSVGMatrix(),
+          m3 = svg.createSVGMatrix();
+
+      var t;
+
+      m1.a = 3; m1.b = 0; m1.c = 0; m1.d = 1; m1.e = 0; m1.f = 0;
+      m2.a = 3; m2.b = 0; m2.c = 0; m2.d = 1; m2.e = 0; m2.f = 0;
+      m3.a = 3; m3.b = 0; m3.c = 0; m3.d = 1; m3.e = 0; m3.f = 0;
+
+      try {
+        t = g.transform.baseVal.createSVGTransformFromMatrix(m1);
+        m1.a = 2;
+        r1.setAttribute('fill', t.matrix != m1 && t.matrix.a == 3 ? 'lime' : 'red');
+      } catch (e) {
+      }
+
+      try {
+        t = svg.createSVGTransformFromMatrix(m2);
+        m2.a = 2;
+        r2.setAttribute('fill', t.matrix != m2 && t.matrix.a == 3 ? 'lime' : 'red');
+      } catch (e) {
+      }
+
+      try {
+        t = g.transform.baseVal.getItem(0);
+        t.setMatrix(m3);
+        m3.a = 2;
+        r3.setAttribute('fill', t.matrix != m3 && t.matrix.a == 3 ? 'lime' : 'red');
+      } catch (e) {
+      }
+    ]]></script>
+
+  </g>
+  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
+    <text id="revision" x="10" y="340" stroke="none"
+      fill="black">$Revision: 1.7 $</text>
+  </g>
+  <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
+  <!-- comment out this watermark once the test is approved -->
+  <!--<g id="draft-watermark">
+    <rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
+    <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
+      text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
+  </g>-->
+</svg>
diff --git a/LayoutTests/svg/W3C-SVG-1.1-SE/coords-dom-04-f.svg b/LayoutTests/svg/W3C-SVG-1.1-SE/coords-dom-04-f.svg
new file mode 100644
index 0000000..9e620bc
--- /dev/null
+++ b/LayoutTests/svg/W3C-SVG-1.1-SE/coords-dom-04-f.svg
@@ -0,0 +1,166 @@
+<svg id="svg-root" width="100%" height="100%"
+  viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg"
+  xmlns:xlink="http://www.w3.org/1999/xlink" onload="test()">
+  <!--======================================================================-->
+  <!--=  Copyright 2008 World Wide Web Consortium, (Massachusetts          =-->
+  <!--=  Institute of Technology, European Research Consortium for         =-->
+  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
+  <!--=  All Rights Reserved.                                              =-->
+  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
+  <!--======================================================================-->
+  <d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
+    template-version="1.4" reviewer="CL" author="ED" status="accepted"
+    version="$Revision: 1.5 $" testname="$RCSfile: coords-dom-04-f.svg,v $">
+    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/coords.html#InterfaceSVGTransformList">
+      <p>
+	  	The test checks the SVGTransformList.consolidate method.
+      </p>
+    </d:testDescription>
+    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        Run the test. No interaction required.
+      </p>
+    </d:operatorScript>
+    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+		There must be 13 green rectangles visible. 
+		The text next to the first rectangle must say "Scripting enabled".
+		The other 12 lines must each say "Passed subtest #n" where n is the subtest number 1..12.
+		If anything red shows, the test has failed.
+      </p>
+    </d:passCriteria>
+  </d:SVGTestCase>
+  <title id="test-title">$RCSfile: coords-dom-04-f.svg,v $</title>
+  <defs>
+    <font-face
+      font-family="SVGFreeSansASCII"
+      unicode-range="U+0-7F">
+      <font-face-src>
+        <font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
+      </font-face-src>
+    </font-face>
+  </defs>
+  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
+	<defs>
+		<style>
+			#test-body-content rect { stroke: black; }
+		</style>
+		<script type="text/ecmascript"><![CDATA[
+		var pos = { "x": 20, "y": 40 };
+		var subtestCounter = 1;
+		var passed = true;
+		
+		function toString(m)
+		{	
+			var decimals = 0;
+			return m.a.toFixed(decimals) + "," + 
+				   m.b.toFixed(decimals) + "," + 
+				   m.c.toFixed(decimals) + "," + 
+				   m.d.toFixed(decimals) + "," + 
+				   m.e.toFixed(decimals) + "," + 
+				   m.f.toFixed(decimals);
+		}
+
+		function referenceEqual(m1,ref,eps)
+		{
+			return (Math.abs(m1.a-ref[0]) < eps &&
+					Math.abs(m1.b-ref[1]) < eps &&
+					Math.abs(m1.c-ref[2]) < eps &&
+					Math.abs(m1.d-ref[3]) < eps &&
+					Math.abs(m1.e-ref[4]) < eps &&
+					Math.abs(m1.f-ref[5]) < eps);
+		}
+
+		function assertEquals(m, ref, eps)
+		{
+			var result = document.createElementNS("http://www.w3.org/2000/svg", "text");
+			var resultrect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
+			result.setAttribute("x", pos.x);
+			result.setAttribute("y", pos.y);
+			resultrect.setAttribute("fill", "lime");
+			resultrect.setAttribute("width", 15);
+			resultrect.setAttribute("height", 15);
+			resultrect.setAttribute("y", pos.y-15);
+			
+			if(referenceEqual(m, ref, eps))
+			{	
+				result.textContent = "Passed subtest #" + subtestCounter;
+			}
+			else
+			{
+				passed = false;
+				result.textContent = "Failed subtest #" + subtestCounter + ". Expected " + ref + " but got " + toString(m);
+			}
+			pos.y += 20;
+			subtestCounter++;
+			var results = document.getElementById("subteststatus");
+			results.appendChild(resultrect)
+			results.appendChild(result);
+		}
+		
+		function test()
+		{
+			eps = 0.005; // "close enough"
+			r = document.getElementById("r");
+
+			t1 = r.transform.baseVal.getItem(0);
+			t2 = r.transform.baseVal.getItem(1);
+			
+			// check that matrices are as specified in the markup
+			assertEquals(t1.matrix, [1, 0, 0, 1, 10, 10], eps);
+			assertEquals(t2.matrix, [0, 1, -1, 0, 0, 0], eps);
+
+			// consolidate
+			tfm = r.transform.baseVal.consolidate();
+			
+			// check that the consolidation is ok
+			assertEquals(tfm.matrix, [0, 1, -1, 0, 10, 10], eps);
+			
+			// check that t1 and t2 were not affected by the consolidation
+			assertEquals(t1.matrix, [1, 0, 0, 1, 10, 10], eps);
+			assertEquals(t2.matrix, [0, 1, -1, 0, 0, 0], eps);
+			
+			// check that modifying t1 has no effect on the consolidated transform
+			t1.setTranslate(10,200);
+			assertEquals(t1.matrix, [1, 0, 0, 1, 10, 200], eps);
+			assertEquals(tfm.matrix, [0, 1, -1, 0, 10, 10], eps);
+			
+			// check that modifying t2 has no effect on the consolidated transform
+			t2.setRotate(-90, 0, 0);
+			assertEquals(t2.matrix, [0, -1, 1, 0, 0, 0], eps);
+			assertEquals(tfm.matrix, [0, 1, -1, 0, 10, 10], eps);
+			
+			// check that modifying the consolidated transform has no effect on the t1 and t2 transforms
+			tfm.matrix.f = 400;
+			assertEquals(tfm.matrix, [0, 1, -1, 0, 10, 400], eps);
+			assertEquals(t1.matrix, [1, 0, 0, 1, 10, 200], eps);
+			assertEquals(t2.matrix, [0, -1, 1, 0, 0, 0], eps);
+		
+			document.getElementById("status").setAttributeNS(null, "fill", passed ? "lime" : "red");
+			document.getElementById("scriptstatus").textContent = "Scripting enabled";
+		}
+	
+	]]></script>
+	</defs>
+
+	<g transform="translate(20 -10)">
+		<g id="subteststatus" transform="translate(0,40)">
+			<rect id="status" y="5" width="15" height="15" fill="red"/>
+			<text id="scriptstatus" y="20" x="20" >Scripting disabled</text>
+		</g>
+	
+		<polyline id="r" fill="none" stroke="green" display="none" transform="translate(10 10) rotate(90)" points="0 0 30 40 80 -20" stroke-width="10"/>
+	</g>
+  </g>
+  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
+    <text id="revision" x="10" y="340" stroke="none"
+      fill="black">$Revision: 1.5 $</text>
+  </g>
+  <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
+  <!-- comment out this watermark once the test is approved --><!--
+  <g id="draft-watermark">
+    <rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
+    <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
+      text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
+  </g>-->
+</svg>
diff --git a/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-01-b.svg b/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-01-b.svg
new file mode 100644
index 0000000..60093ac
--- /dev/null
+++ b/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-01-b.svg
@@ -0,0 +1,107 @@
+<svg version="1.1" baseProfile="tiny" onload="testSVGLocatable()" id="svg-root"
+  width="100%" height="100%" viewBox="0 0 480 360"
+  xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <!--======================================================================-->
+  <!--=  SVG 1.1 2nd Edition Test Case                                     =-->
+  <!--======================================================================-->
+  <!--=  Copyright 2009 World Wide Web Consortium, (Massachusetts          =-->
+  <!--=  Institute of Technology, European Research Consortium for         =-->
+  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
+  <!--=  All Rights Reserved.                                              =-->
+  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
+  <!--======================================================================-->
+  <d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
+    template-version="1.3" reviewer="AE,ED" author="AN" status="accepted"
+    version="$Revision: 1.6 $" testname="$RCSfile: types-dom-01-b.svg,v $">
+    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/types.html#BasicDOMInterfaces">
+      <p>
+        This test checks all the methods and properties of the SVGLocatable interface.
+        Note the use of nested svg elements and testing against different elements in the hierarchy.
+        Note that the values of .getScreenCTM() and .getCTM() can only be tested correctly if they are
+        in the html-based test or the width and height of the root element is explicitly set to 480x360.
+        The methods .getScreenCTM() and .getCTM() are tested from the rotated text element, the method .getBBox(),
+        .getTransformToElement() is tested between the rotated text and its parent group, the method .getBBox() and
+        the properties .farthestViewportElement and .nearestViewportElement are tested on the blue circle.
+      </p>
+    </d:testDescription>
+    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        Run the test. No interaction required. Make sure scripting is enabled.
+      </p>
+    </d:operatorScript>
+    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        For the test to pass, the values generated by script must match the values provided in the png image. The correct values are:
+      </p>
+      <p>
+        .getScreenCTM() for id "rotText": 0.42,0.42,-0.42,0.42,70.00,-60.00
+      </p>
+      <p>
+        .getCTM() for id "rotText": 0.42,0.42,-0.42,0.42,70.00,-60.00
+      </p>
+      <p>
+        .getTransformToElement() between id "rotText" and id "parentGroup": 0.42,0.42,-0.42,0.42,0.00,0.00
+      </p>
+      <p>
+        .getBBox() for 'blueCircle': .x=-50,.y=-50,.width=100,.height=100
+      </p>
+      <p>
+        .farthestViewportElement of blueCircle=svg-root
+      </p>
+      <p>
+        .nearestViewportElement of blueCircle=nestedSVG
+      </p>
+    </d:passCriteria>
+  </d:SVGTestCase>
+  <title id="test-title">$RCSfile: types-dom-01-b.svg,v $</title>
+  <defs>
+    <font-face font-family="SVGFreeSansASCII" unicode-range="U+0-7F">
+      <font-face-src>
+        <font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
+      </font-face-src>
+    </font-face>
+  </defs>
+  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
+    <script type="text/ecmascript">
+      function testSVGLocatable() {
+      var rotText = document.getElementById("rotatedText");
+      var blueCircle = document.getElementById("blueCircle")
+      var matr = rotText.getScreenCTM();
+      document.getElementById("result1").firstChild.nodeValue = ".getScreenCTM(): " + matr.a.toFixed(2) + "," + matr.b.toFixed(2) + "," + matr.c.toFixed(2) + "," + matr.d.toFixed(2) + "," + matr.e.toFixed(2) + "," + matr.f.toFixed(2);
+      var matr = rotText.getCTM();
+      document.getElementById("result2").firstChild.nodeValue = ".getCTM(): " + matr.a.toFixed(2) + "," + matr.b.toFixed(2) + "," + matr.c.toFixed(2) + "," + matr.d.toFixed(2) + "," + matr.e.toFixed(2) + "," + matr.f.toFixed(2);
+      var matr = rotText.getTransformToElement(document.getElementById("parentGroup"));
+      document.getElementById("result3").firstChild.nodeValue = ".getTransformToElement(): " + matr.a.toFixed(2) + "," + matr.b.toFixed(2) + "," + matr.c.toFixed(2) + "," + matr.d.toFixed(2) + "," + matr.e.toFixed(2) + "," + matr.f.toFixed(2);
+      var bbox = blueCircle.getBBox();
+      document.getElementById("result4").firstChild.nodeValue = ".getBBox() for 'blueCircle': .x="+bbox.x+",.y="+bbox.y+",.width="+bbox.width+",.height="+bbox.height;
+      document.getElementById("result5").firstChild.nodeValue = ".farthestViewportElement of blueCircle="+blueCircle.farthestViewportElement.getAttributeNS(null,"id");
+      document.getElementById("result6").firstChild.nodeValue = ".nearestViewportElement of blueCircle="+blueCircle.nearestViewportElement.getAttributeNS(null,"id");
+      }
+    </script>
+    <g font-size="12">
+      <g id="parentGroup" transform="translate(70,-60)">
+        <text id="rotatedText" transform="scale(0.6),rotate(45)" font-size="20" x="30" y="150">Rotated Text for testing SVGLocatable</text>
+        <text id="otherText" transform="scale(0.7)" font-size="20" x="100" y="130">Some other text with id 'otherText'</text>
+        <svg id="nestedSVG" x="200" y="100" width="110" height="110" viewBox="-55 -55 110 110">
+          <circle id="blueCircle" cx="0" cy="0" r="50" fill="blue"/>
+        </svg>
+      </g>
+      <text id="result1" x="10" y="200"> </text>
+      <text id="result2" x="10" y="220"> </text>
+      <text id="result3" x="10" y="240"> </text>
+      <text id="result4" x="10" y="260"> </text>
+      <text id="result5" x="10" y="280"> </text>
+      <text id="result6" x="10" y="300"> </text>
+    </g>
+  </g>
+  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
+    <text id="revision" x="10" y="340" stroke="none" fill="black">$Revision: 1.6 $</text>
+  </g>
+  <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
+  <!-- comment out this watermark once the test is approved -->
+  <!--<g id="draft-watermark">
+    <rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
+    <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
+      text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
+  </g>-->
+</svg>
diff --git a/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-02-f.svg b/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-02-f.svg
new file mode 100644
index 0000000..cac86de
--- /dev/null
+++ b/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-02-f.svg
@@ -0,0 +1,156 @@
+<svg id="svg-root" width="100%" height="100%"
+  viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg"
+  xmlns:xlink="http://www.w3.org/1999/xlink">
+  <!--======================================================================-->
+  <!--=  Copyright 2008 World Wide Web Consortium, (Massachusetts          =-->
+  <!--=  Institute of Technology, European Research Consortium for         =-->
+  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
+  <!--=  All Rights Reserved.                                              =-->
+  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
+  <!--======================================================================-->
+  <d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
+    template-version="1.3" reviewer="CL" author="CM" status="accepted"
+    version="$Revision: 1.8 $" testname="$RCSfile: types-dom-02-f.svg,v $">
+    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/types.html#BasicDOMInterfaces">
+      <p>
+        This tests that the animVal properties that are objects
+        are always distinct from their corresponding baseVal properties.
+        This is tested for interfaces SVGAnimatedNumberList, SVGAnimatedLength,
+        SVGAnimatedLengthList, SVGAnimatedAngle, SVGAnimatedRect,
+        SVGAnimatedTransformList and SVGAnimatedPreserveAspectRatio.
+      </p>
+    </d:testDescription>
+    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        Run the test. No interaction required.
+      </p>
+    </d:operatorScript>
+    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        Once loaded, the test shows 7 rectangles
+        representing seven sub-tests reflecting
+        the result of checking that an animVal object is
+        not the same object as its corresponding baseVal object.
+        Each rectangle will be either black to indicate that
+        the sub-test wasn't run, red to indicate that the
+        sub-test failed, and green to indicate that the
+        sub-test passed.
+      </p>
+      <p>
+        The test is passed if all 7 rectangles are green.
+      </p>
+    </d:passCriteria>
+  </d:SVGTestCase>
+  <title id="test-title">$RCSfile: types-dom-02-f.svg,v $</title>
+  <defs>
+    <font-face
+      font-family="SVGFreeSansASCII"
+      unicode-range="U+0-7F">
+      <font-face-src>
+        <font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
+      </font-face-src>
+    </font-face>
+  </defs>
+  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
+
+    <text x='210' y='55' text-anchor='end'>animVal != baseVal:</text>
+
+    <g font-size='14' transform='translate(500)rotate(90)'>
+      <rect id='r1b' x='40' y='60' width='20' height='20'/>
+      <text x='70' y='75'>SVGAnimatedNumberList</text>
+      <rect id='r2b' x='40' y='90' width='20' height='20'/>
+      <text x='70' y='105'>SVGAnimatedLength</text>
+      <rect id='r3b' x='40' y='120' width='20' height='20'/>
+      <text x='70' y='135'>SVGAnimatedLengthList</text>
+      <rect id='r4b' x='40' y='150' width='20' height='20'/>
+      <text x='70' y='165'>SVGAnimatedAngle</text>
+      <rect id='r5b' x='40' y='180' width='20' height='20'/>
+      <text x='70' y='195'>SVGAnimatedRect</text>
+      <rect id='r6b' x='40' y='210' width='20' height='20'/>
+      <text x='70' y='225'>SVGAnimatedTransformList</text>
+      <rect id='r7b' x='40' y='240' width='20' height='20'/>
+      <text x='70' y='255'>SVGAnimatedPreserveAspectRatio</text>
+    </g>
+
+    <g display='none'>
+      <text id='text' rotate='0 20 40'>abc</text>
+      <circle id='circle' r='50'/>
+      <marker id='marker' orient='1.5708rad'/>
+      <svg id='svg' viewBox='10 20 30 40'/>
+    </g>
+
+    <script><![CDATA[
+      function $(id) { return document.getElementById(id); }
+
+      var text = $('text'),
+          circle = $('circle'),
+          marker = $('marker'),
+          svg = $('svg');
+
+      function expect_value(id, fn, value) {
+        try {
+          if (fn() === value) {
+            $(id).setAttribute('fill', 'green');
+            return;
+          }
+        } catch (e) {
+        }
+        $(id).setAttribute('fill', 'red');
+      }
+
+      // SVGAnimatedNumberList: rotate on text
+      expect_value
+        ('r1b',
+         function() { return text.rotate.animVal != text.rotate.baseVal; },
+         true);
+
+      // SVGAnimatedLength: r on circle
+      expect_value
+        ('r2b',
+         function() { return circle.r.animVal != text.rotate.baseVal; },
+         true);
+
+      // SVGAnimatedLengthList: x on text
+      expect_value
+        ('r3b',
+         function() { return text.x.animVal != text.x.baseVal; },
+         true);
+
+      // SVGAnimatedAngle: orient on marker
+      expect_value
+        ('r4b',
+         function() { return marker.orientAngle.animVal != marker.orientAngle.baseVal; },
+         true);
+
+      // SVGAnimatedRect: viewBox on svg
+      expect_value
+        ('r5b',
+         function() { return svg.viewBox.animVal != svg.viewBox.baseVal; },
+         true);
+
+      // SVGAnimatedTransformList: transform on circle
+      expect_value
+        ('r6b',
+         function() { return circle.transform.animVal != circle.transform.baseVal; },
+         true);
+
+      // SVGAnimatedPreserveAspectRatio: preserveAspectRatio on svg
+      expect_value
+        ('r7b',
+         function() { return svg.preserveAspectRatio.animVal != svg.preserveAspectRatio.baseVal; },
+         true);
+    ]]></script>
+
+  </g>
+  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
+    <text id="revision" x="10" y="340" stroke="none"
+      fill="black">$Revision: 1.8 $</text>
+  </g>
+  <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
+  <!-- comment out this watermark once the test is approved --><!--
+  <g id="draft-watermark">
+    <rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
+    <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
+      text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
+  </g>-->
+</svg>
diff --git a/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-03-b.svg b/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-03-b.svg
new file mode 100644
index 0000000..b922825
--- /dev/null
+++ b/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-03-b.svg
@@ -0,0 +1,84 @@
+<svg id="svg-root" width="100%" height="100%"
+  viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg"
+  xmlns:xlink="http://www.w3.org/1999/xlink">
+  <!--======================================================================-->
+  <!--=  Copyright 2008 World Wide Web Consortium, (Massachusetts          =-->
+  <!--=  Institute of Technology, European Research Consortium for         =-->
+  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
+  <!--=  All Rights Reserved.                                              =-->
+  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
+  <!--======================================================================-->
+  <d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
+    template-version="1.3" reviewer="ED" author="CM" status="accepted"
+    version="$Revision: 1.7 $" testname="$RCSfile: types-dom-03-b.svg,v $">
+    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/#__svg__SVGLocatable__getBBox">
+      <p>
+        Test that bounding box geometry can be obtained
+        before the SVGLoad event is dispatched.
+      </p>
+    </d:testDescription>
+    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        Run the test. No interaction required.
+      </p>
+    </d:operatorScript>
+    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        Load the test.  A rectangle will be shown indicating
+        the result of the test.  It will be black if test
+        did not run, red if the test failed and green if
+        the test passed.
+      </p>
+      <p>
+        The test is passed if the rectangle is green.
+      </p>
+    </d:passCriteria>
+  </d:SVGTestCase>
+  <title id="test-title">$RCSfile: types-dom-03-b.svg,v $</title>
+  <defs>
+    <font-face
+      font-family="SVGFreeSansASCII"
+      unicode-range="U+0-7F">
+      <font-face-src>
+        <font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
+      </font-face-src>
+    </font-face>
+  </defs>
+  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
+
+    <text x='10' y='30'>Test that getBBox() works before SVGLoad</text>
+
+    <rect id='r' x='10' y='40' width='50' height='50'/>
+    <text id='t' visibility='hidden' x='1000' y='1000'>Abc</text>
+
+    <script><![CDATA[
+      function $(x) { return document.getElementById(x); }
+
+      var t = $('t'),
+          r = $('r'),
+          b1, b2, pass = false;
+
+      try {
+        b1 = t.getBBox();
+        b2 = r.getBBox();
+        if (b1.x > 0 && b1.y > 0 && b1.width > 0 && b1.height > 0
+              && b2.x == 10 && b2.y == 40 && b2.width == 50 && b2.height == 50) {
+          pass = true;
+        }
+      } catch (e) {
+      }
+      r.setAttribute('fill', pass ? 'green' : 'red');
+    ]]></script>
+  </g>
+  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
+    <text id="revision" x="10" y="340" stroke="none"
+      fill="black">$Revision: 1.7 $</text>
+  </g>
+  <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
+  <!-- comment out this watermark once the test is approved --><!--
+  <g id="draft-watermark">
+    <rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
+    <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
+      text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
+  </g>-->
+</svg>
diff --git a/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-04-b.svg b/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-04-b.svg
new file mode 100644
index 0000000..37df625
--- /dev/null
+++ b/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-04-b.svg
@@ -0,0 +1,250 @@
+<svg id="svg-root" width="100%" height="100%"
+  viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg"
+  xmlns:xlink="http://www.w3.org/1999/xlink">
+  <!--======================================================================-->
+  <!--=  Copyright 2008 World Wide Web Consortium, (Massachusetts          =-->
+  <!--=  Institute of Technology, European Research Consortium for         =-->
+  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
+  <!--=  All Rights Reserved.                                              =-->
+  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
+  <!--======================================================================-->
+  <d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
+    template-version="1.3" reviewer="ED" author="CM" status="accepted"
+    version="$Revision: 1.7 $" testname="$RCSfile: types-dom-04-b.svg,v $">
+    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/svgdom.html#SVGDOMOverview">
+      <p>
+        This tests that SVG DOM objects that correspond to attributes
+        are live.
+        This is tested for interfaces
+        SVGAnimatedNumberList, SVGAnimatedLength,
+        SVGAnimatedLengthList, SVGAnimatedAngle, SVGAnimatedRect,
+        SVGAnimatedTransformList, SVGAnimatedPreserveAspectRatio,
+        SVGAnimatedBoolean, SVGAnimatedString, SVGAnimatedEnumeration,
+        SVGAnimatedInteger and SVGAnimatedNumber.
+      </p>
+    </d:testDescription>
+    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        Run the test. No interaction required.
+      </p>
+    </d:operatorScript>
+    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        Once loaded, the test shows 12 rectangles, one for
+        each sub-test.  Each sub-test is checking that
+        an SVG DOM object of a particular interface is live.
+        The rectangle indicates the result of running the
+        sub-test: black to indicate that it wasn't run,
+        red to indicate that it failed, and green to indicate
+        that it passed.
+      </p>
+      <p>
+        The test is passed if all 12 rectangles are green.
+      </p>
+    </d:passCriteria>
+  </d:SVGTestCase>
+  <title id="test-title">$RCSfile: types-dom-04-b.svg,v $</title>
+  <defs>
+    <font-face
+      font-family="SVGFreeSansASCII"
+      unicode-range="U+0-7F">
+      <font-face-src>
+        <font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
+      </font-face-src>
+    </font-face>
+  </defs>
+  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
+
+    <text x='10' y='30'>Testing liveness of SVG DOM objects</text>
+
+    <g font-size='14' transform='translate(500)rotate(90)'>
+      <rect id='r1' x='40' y='60' width='20' height='20'/>
+      <text x='70' y='75'>SVGAnimatedNumberList</text>
+      <rect id='r2' x='40' y='90' width='20' height='20'/>
+      <text x='70' y='105'>SVGAnimatedLength</text>
+      <rect id='r3' x='40' y='120' width='20' height='20'/>
+      <text x='70' y='135'>SVGAnimatedLengthList</text>
+      <rect id='r4' x='40' y='150' width='20' height='20'/>
+      <text x='70' y='165'>SVGAnimatedAngle</text>
+      <rect id='r5' x='40' y='180' width='20' height='20'/>
+      <text x='70' y='195'>SVGAnimatedRect</text>
+      <rect id='r6' x='40' y='210' width='20' height='20'/>
+      <text x='70' y='225'>SVGAnimatedTransformList</text>
+      <rect id='r7' x='40' y='240' width='20' height='20'/>
+      <text x='70' y='255'>SVGAnimatedPreserveAspectRatio</text>
+      <rect id='r8' x='40' y='270' width='20' height='20'/>
+      <text x='70' y='285'>SVGAnimatedBoolean</text>
+      <rect id='r9' x='40' y='300' width='20' height='20'/>
+      <text x='70' y='315'>SVGAnimatedString</text>
+      <rect id='r10' x='40' y='330' width='20' height='20'/>
+      <text x='70' y='345'>SVGAnimatedEnumeration</text>
+      <rect id='r11' x='40' y='360' width='20' height='20'/>
+      <text x='70' y='375'>SVGAnimatedInteger</text>
+      <rect id='r12' x='40' y='390' width='20' height='20'/>
+      <text x='70' y='405'>SVGAnimatedNumber</text>
+    </g>
+
+    <g display='none'>
+      <text id='text' rotate='0 20 40' x='10 20' lengthAdjust='spacing'>abc</text>
+      <circle id='circle' r='50' transform='scale(1) scale(2)' class='one'/>
+      <marker id='marker' orient='30'/>
+      <svg id='svg' viewBox='10 20 30 40' preserveAspectRatio='none' externalResourcesRequired='false'/>
+      <filter>
+        <feTurbulence id='feTurbulence' baseFrequency='2 3' numOctaves='2'/>
+      </filter>
+    </g>
+
+    <script><![CDATA[
+      function $(id) { return document.getElementById(id); }
+
+      var text = $('text'),
+          circle = $('circle'),
+          marker = $('marker'),
+          svg = $('svg'),
+          feTurbulence = $('feTurbulence');
+
+      function expect_exception(id, fn, code) {
+        try {
+          fn();
+        } catch (e) {
+          if (e.code == code) {
+            $(id).setAttribute('fill', 'green');
+            return;
+          }
+        }
+        $(id).setAttribute('fill', 'red');
+      }
+
+      function expect_value(id, fn, value) {
+        try {
+          if (fn() === value) {
+            $(id).setAttribute('fill', 'green');
+            return;
+          }
+        } catch (e) {
+        }
+        $(id).setAttribute('fill', 'red');
+      }
+
+      // SVGAnimatedNumberList: rotate on text
+      expect_value
+        ('r1',
+         function() {
+           return text.rotate.baseVal.numberOfItems == 3
+               && (text.setAttribute('rotate', '0 20'), text.rotate.baseVal.numberOfItems == 2);
+         },
+         true);
+
+      // SVGAnimatedLength: r on circle
+      expect_value
+        ('r2',
+         function() {
+           return circle.r.baseVal.value == 50
+               && (circle.setAttribute('r', '100'), circle.r.baseVal.value == 100);
+         },
+         true);
+
+      // SVGAnimatedLengthList: x on text
+      expect_value
+        ('r3',
+         function() {
+           return text.x.baseVal.numberOfItems == 2
+               && (text.setAttribute('x', '10'), text.x.baseVal.numberOfItems == 1);
+         },
+         true);
+
+      // SVGAnimatedAngle: orient on marker
+      expect_value
+        ('r4',
+         function() {
+           return marker.orientAngle.baseVal.value == 30
+               && (marker.setAttribute('orient', '60'), marker.orientAngle.baseVal.value == 60);
+         },
+         true);
+
+      // SVGAnimatedRect: viewBox on svg
+      expect_value
+        ('r5',
+         function() {
+           return svg.viewBox.baseVal.x == 10
+               && (svg.setAttribute('viewBox', '20 30 40 50'), svg.viewBox.baseVal.x == 20);
+         },
+         true);
+
+      // SVGAnimatedTransformList: transform on circle
+      expect_value
+        ('r6',
+         function() {
+           return circle.transform.baseVal.numberOfItems == 2
+               && (circle.setAttribute('transform', 'scale(1)'), circle.transform.baseVal.numberOfItems == 1);
+         },
+         true);
+
+      // SVGAnimatedPreserveAspectRatio: preserveAspectRatio on svg
+      expect_value
+        ('r7',
+         function() {
+           return svg.preserveAspectRatio.baseVal.align == 1 /* none */
+               && (svg.setAttribute('preserveAspectRatio', 'xMidYMid'), svg.preserveAspectRatio.baseVal.align == 6);
+         },
+         true);
+
+      // SVGAnimatedBoolean: externalResourcesRequired on svg
+      expect_value
+        ('r8',
+         function() {
+           return !svg.externalResourcesRequired.baseVal
+               && (svg.setAttribute('externalResourcesRequired', 'true'), svg.externalResourcesRequired.baseVal);
+         },
+         true);
+
+      // SVGAnimatedString: class on circle
+      expect_value
+        ('r9',
+         function() {
+           return circle.className.baseVal == 'one'
+               && (circle.setAttribute('class', 'two'), circle.className.baseVal == 'two');
+         },
+         true);
+
+      // SVGAnimatedEnumeration: lengthAdjust on text
+      expect_value
+        ('r10',
+         function() {
+           return text.lengthAdjust.baseVal == 1 /* spacing*/
+               && (text.setAttribute('lengthAdjust', 'spacingAndGlyphs'), text.lengthAdjust.baseVal == 2);
+         },
+         true);
+
+      // SVGAnimatedInteger: numOctaves on feTurbulence
+      expect_value
+        ('r11',
+         function() {
+           return feTurbulence.numOctaves.baseVal == 2
+               && (feTurbulence.setAttribute('numOctaves', '1'), feTurbulence.numOctaves.baseVal == 1);
+         },
+         true);
+
+      // SVGAnimatedNumber: baseFrequency on feTurbulence
+      expect_value
+        ('r12',
+         function() {
+           return feTurbulence.baseFrequencyY.baseVal == 3
+               && (feTurbulence.setAttribute('baseFrequency', '4 5'), feTurbulence.baseFrequencyY.baseVal == 5);
+         },
+         true);
+    ]]></script>
+
+  </g>
+  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
+    <text id="revision" x="10" y="340" stroke="none"
+      fill="black">$Revision: 1.7 $</text>
+  </g>
+  <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
+  <!-- comment out this watermark once the test is approved --><!--
+  <g id="draft-watermark">
+    <rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
+    <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
+      text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
+  </g>-->
+</svg>
diff --git a/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-05-b.svg b/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-05-b.svg
new file mode 100644
index 0000000..52ca383
--- /dev/null
+++ b/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-05-b.svg
@@ -0,0 +1,127 @@
+<svg id="svg-root" width="100%" height="100%"
+  viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg"
+  xmlns:xlink="http://www.w3.org/1999/xlink">
+  <!--======================================================================-->
+  <!--=  Copyright 2008 World Wide Web Consortium, (Massachusetts          =-->
+  <!--=  Institute of Technology, European Research Consortium for         =-->
+  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
+  <!--=  All Rights Reserved.                                              =-->
+  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
+  <!--======================================================================-->
+  <d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
+    template-version="1.3" reviewer="ED" author="CM" status="accepted"
+    version="$Revision: 1.6 $" testname="$RCSfile: types-dom-05-b.svg,v $">
+    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/types.html#BasicDOMInterfaces">
+      <p>
+        This tests that assigning a valid length or angle string to
+        valueAsString on an SVGLength or SVGAngle will affect that object's
+        unitType, and that assigning an invalid string will throw
+        a DOMException with code SYNTAX_ERR.
+      </p>
+    </d:testDescription>
+    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        Run the test. No interaction required.
+      </p>
+    </d:operatorScript>
+    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        Once the test is loaded, four rectangles are presented, indicating
+        the result of passing a valid or invalid string to an
+        SVGLength or SVGAngle object, as indicated.  Each rectangle
+        will be black if the sub-test did not run, red if it
+        failed or green if it passed.
+      </p>
+      <p>
+        The test is passed if all four rectangles are green.
+      </p>
+    </d:passCriteria>
+  </d:SVGTestCase>
+  <title id="test-title">$RCSfile: types-dom-05-b.svg,v $</title>
+  <defs>
+    <font-face
+      font-family="SVGFreeSansASCII"
+      unicode-range="U+0-7F">
+      <font-face-src>
+        <font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
+      </font-face-src>
+    </font-face>
+  </defs>
+  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
+
+    <text x='10' y='30'>Test side effects of assigning to valueAsString</text>
+
+    <rect id='r1' x='10' y='40' width='30' height='30'/>
+    <rect id='r2' x='10' y='80' width='30' height='30'/>
+    <rect id='r3' x='10' y='120' width='30' height='30'/>
+    <rect id='r4' x='10' y='160' width='30' height='30'/>
+    <g font-size='15'>
+      <text x='50' y='60'>Valid string on SVGLength</text>
+      <text x='50' y='100'>Invalid string on SVGLength</text>
+      <text x='50' y='140'>Valid string on SVGAngle</text>
+      <text x='50' y='180'>Invalid string on SVGAngle</text>
+    </g>
+
+    <circle id='c' r='1em' display='none'/>
+    <marker id='m' orient='20rad' display='none'/>
+    <script>
+      var b,
+          c = document.getElementById('c');
+          m = document.getElementById('m');
+      
+      b = false;
+      try {
+        if (c.r.baseVal.unitType != 3) { /* SVGLength.SVG_LENGTHTYPE_EMS */
+          throw 1;
+        }
+        c.r.baseVal.valueAsString = '2px';
+        if (c.r.baseVal.unitType == 5) { /* SVGLength.SVG_LENGTHTYPE_PX */
+          b = true;
+        }
+      } catch (e) {
+      }
+      document.getElementById('r1').setAttribute('fill', b ? 'green' : 'red');
+
+      b = false;
+      try {
+        c.r.baseVal.valueAsString = 'rubbish';
+      } catch (e) {
+        b = e.code == 12; // SYNTAX_ERR
+      }
+      document.getElementById('r2').setAttribute('fill', b ? 'green' : 'red');
+
+      b = false;
+      try {
+        if (m.orientAngle.baseVal.unitType != 3) { /* SVGAngle.SVG_ANGLETYPE_RAD */
+          throw 1;
+        }
+        m.orientAngle.baseVal.valueAsString = '2grad';
+        if (m.orientAngle.baseVal.unitType == 4) { /* SVGAngle.SVG_ANGLETYPE_GRAD */
+          b = true;
+        }
+      } catch (e) {
+      }
+      document.getElementById('r3').setAttribute('fill', b ? 'green' : 'red');
+
+      b = false;
+      try {
+        m.orientAngle.baseVal.valueAsString = 'rubbish';
+      } catch (e) {
+        b = e.code == 12; // SYNTAX_ERR
+      }
+      document.getElementById('r4').setAttribute('fill', b ? 'green' : 'red');
+    </script>
+
+  </g>
+  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
+    <text id="revision" x="10" y="340" stroke="none"
+      fill="black">$Revision: 1.6 $</text>
+  </g>
+  <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
+  <!-- comment out this watermark once the test is approved --><!--
+  <g id="draft-watermark">
+    <rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
+    <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
+      text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
+  </g>-->
+</svg>
diff --git a/LayoutTests/svg/animations/animate-gradient-transform-expected.txt b/LayoutTests/svg/animations/animate-gradient-transform-expected.txt
index 056f484..eb62209 100644
--- a/LayoutTests/svg/animations/animate-gradient-transform-expected.txt
+++ b/LayoutTests/svg/animations/animate-gradient-transform-expected.txt
@@ -6,11 +6,11 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS gradient.gradientTransform.baseVal.consolidate().matrix.e is 0
-PASS gradient.gradientTransform.animVal.consolidate().matrix.e is 0
+PASS gradient.gradientTransform.animVal.consolidate().matrix.e threw exception Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7.
 PASS gradient.gradientTransform.baseVal.consolidate().matrix.e is 100
-PASS gradient.gradientTransform.animVal.consolidate().matrix.e is 100
+PASS gradient.gradientTransform.animVal.consolidate().matrix.e threw exception Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7.
 PASS gradient.gradientTransform.baseVal.consolidate().matrix.e is 200
-PASS gradient.gradientTransform.animVal.consolidate().matrix.e is 200
+PASS gradient.gradientTransform.animVal.consolidate().matrix.e threw exception Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7.
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/LayoutTests/svg/animations/script-tests/animate-gradient-transform.js b/LayoutTests/svg/animations/script-tests/animate-gradient-transform.js
index 5d14964..08f68b9 100644
--- a/LayoutTests/svg/animations/script-tests/animate-gradient-transform.js
+++ b/LayoutTests/svg/animations/script-tests/animate-gradient-transform.js
@@ -46,21 +46,21 @@ function sample1() {
     // FIXME: Add animVal support. Animates baseVal at the moment.
     // Check initial conditions
     shouldBe("gradient.gradientTransform.baseVal.consolidate().matrix.e", "0");
-    shouldBe("gradient.gradientTransform.animVal.consolidate().matrix.e", "0");
+    shouldThrow("gradient.gradientTransform.animVal.consolidate().matrix.e");
 }
 
 function sample2() {
     // FIXME: Add animVal support. Animates baseVal at the moment.
     // Check half-time conditions
     shouldBe("gradient.gradientTransform.baseVal.consolidate().matrix.e", "100");
-    shouldBe("gradient.gradientTransform.animVal.consolidate().matrix.e", "100");
+    shouldThrow("gradient.gradientTransform.animVal.consolidate().matrix.e");
 }
 
 function sample3() {
     // FIXME: Add animVal support. Animates baseVal at the moment.
     // Check end conditions
     shouldBe("gradient.gradientTransform.baseVal.consolidate().matrix.e", "200");
-    shouldBe("gradient.gradientTransform.animVal.consolidate().matrix.e", "200");
+    shouldThrow("gradient.gradientTransform.animVal.consolidate().matrix.e");
 }
 
 function executeTest() {  
diff --git a/LayoutTests/svg/dom/SVGMatrix-expected.txt b/LayoutTests/svg/dom/SVGMatrix-expected.txt
new file mode 100644
index 0000000..fe2301b
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGMatrix-expected.txt
@@ -0,0 +1,124 @@
+This test checks the SVGMatrix API
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Check initial matrix values
+PASS matrix.a is 1
+PASS matrix.b is 0
+PASS matrix.c is 0
+PASS matrix.d is 1
+PASS matrix.e is 0
+PASS matrix.f is 0
+
+Check assigning matrices
+PASS matrix.a = 2 is 2
+PASS matrix.f = 200 is 200
+
+Check assigning invalid matrices
+PASS matrix.a = matrix threw exception TypeError: Type error.
+PASS matrix.a = svgElement threw exception TypeError: Type error.
+PASS matrix.a = 'aString' threw exception TypeError: Type error.
+PASS matrix.b = matrix threw exception TypeError: Type error.
+PASS matrix.b = svgElement threw exception TypeError: Type error.
+PASS matrix.b = 'aString' threw exception TypeError: Type error.
+PASS matrix.c = matrix threw exception TypeError: Type error.
+PASS matrix.c = svgElement threw exception TypeError: Type error.
+PASS matrix.c = 'aString' threw exception TypeError: Type error.
+PASS matrix.d = matrix threw exception TypeError: Type error.
+PASS matrix.d = svgElement threw exception TypeError: Type error.
+PASS matrix.d = 'aString' threw exception TypeError: Type error.
+PASS matrix.e = matrix threw exception TypeError: Type error.
+PASS matrix.e = svgElement threw exception TypeError: Type error.
+PASS matrix.e = 'aString' threw exception TypeError: Type error.
+PASS matrix.f = matrix threw exception TypeError: Type error.
+PASS matrix.f = svgElement threw exception TypeError: Type error.
+PASS matrix.f = 'aString' threw exception TypeError: Type error.
+
+Check that the matrix is still containing the correct values
+PASS matrix.a is 2
+PASS matrix.b is 0
+PASS matrix.c is 0
+PASS matrix.d is 1
+PASS matrix.e is 0
+PASS matrix.f is 200
+
+Check assigning null works as expected
+PASS matrix.f = null is null
+PASS matrix.a is 2
+PASS matrix.b is 0
+PASS matrix.c is 0
+PASS matrix.d is 1
+PASS matrix.e is 0
+PASS matrix.f is 0
+
+Check calling 'multiply' with invalid arguments
+PASS matrix.multiply() threw exception SyntaxError: Not enough arguments.
+PASS matrix.multiply(true) threw exception TypeError: Type error.
+PASS matrix.multiply(2) threw exception TypeError: Type error.
+PASS matrix.multiply('aString') threw exception TypeError: Type error.
+PASS matrix.multiply(svgElement) threw exception TypeError: Type error.
+
+Check calling 'translate' with invalid arguments
+PASS matrix.translate() threw exception SyntaxError: Not enough arguments.
+PASS matrix.translate(true) threw exception SyntaxError: Not enough arguments.
+PASS matrix.translate(2) threw exception SyntaxError: Not enough arguments.
+PASS matrix.translate('aString') threw exception SyntaxError: Not enough arguments.
+PASS matrix.translate(svgElement) threw exception SyntaxError: Not enough arguments.
+PASS matrix.translate('aString', 'aString') threw exception TypeError: Type error.
+PASS matrix.translate(svgElement, svgElement) threw exception TypeError: Type error.
+PASS matrix.translate(2, 'aString') threw exception TypeError: Type error.
+PASS matrix.translate(2, svgElement) threw exception TypeError: Type error.
+PASS matrix.translate('aString', 2) threw exception TypeError: Type error.
+PASS matrix.translate(svgElement, 2) threw exception TypeError: Type error.
+
+Check calling 'scale' with invalid arguments
+PASS matrix.scale() threw exception SyntaxError: Not enough arguments.
+PASS matrix.scale('aString') threw exception TypeError: Type error.
+PASS matrix.scale(svgElement) threw exception TypeError: Type error.
+
+Check calling 'scaleNonUniform' with invalid arguments
+PASS matrix.scaleNonUniform() threw exception SyntaxError: Not enough arguments.
+PASS matrix.scaleNonUniform(true) threw exception SyntaxError: Not enough arguments.
+PASS matrix.scaleNonUniform(2) threw exception SyntaxError: Not enough arguments.
+PASS matrix.scaleNonUniform('aString') threw exception SyntaxError: Not enough arguments.
+PASS matrix.scaleNonUniform(svgElement) threw exception SyntaxError: Not enough arguments.
+PASS matrix.scaleNonUniform('aString', 'aString') threw exception TypeError: Type error.
+PASS matrix.scaleNonUniform(svgElement, svgElement) threw exception TypeError: Type error.
+PASS matrix.scaleNonUniform(2, 'aString') threw exception TypeError: Type error.
+PASS matrix.scaleNonUniform(2, svgElement) threw exception TypeError: Type error.
+PASS matrix.scaleNonUniform('aString', 2) threw exception TypeError: Type error.
+PASS matrix.scaleNonUniform(svgElement, 2) threw exception TypeError: Type error.
+
+Check calling 'rotate' with invalid arguments
+PASS matrix.rotate() threw exception SyntaxError: Not enough arguments.
+PASS matrix.rotate('aString') threw exception TypeError: Type error.
+PASS matrix.rotate(svgElement) threw exception TypeError: Type error.
+
+Check calling 'rotateFromVector' with invalid arguments
+PASS matrix.rotateFromVector() threw exception SyntaxError: Not enough arguments.
+PASS matrix.rotateFromVector(true) threw exception SyntaxError: Not enough arguments.
+PASS matrix.rotateFromVector(2) threw exception SyntaxError: Not enough arguments.
+PASS matrix.rotateFromVector('aString') threw exception SyntaxError: Not enough arguments.
+PASS matrix.rotateFromVector(svgElement) threw exception SyntaxError: Not enough arguments.
+PASS matrix.rotateFromVector('aString', 'aString') threw exception TypeError: Type error.
+PASS matrix.rotateFromVector(svgElement, svgElement) threw exception TypeError: Type error.
+PASS matrix.rotateFromVector(2, 'aString') threw exception TypeError: Type error.
+PASS matrix.rotateFromVector(2, svgElement) threw exception TypeError: Type error.
+PASS matrix.rotateFromVector('aString', 2) threw exception TypeError: Type error.
+PASS matrix.rotateFromVector(svgElement, 2) threw exception TypeError: Type error.
+
+Check calling 'skewX' with invalid arguments
+PASS matrix.skewX() threw exception SyntaxError: Not enough arguments.
+PASS matrix.skewX('aString') threw exception TypeError: Type error.
+PASS matrix.skewX(svgElement) threw exception TypeError: Type error.
+
+Check calling 'skewY' with invalid arguments
+PASS matrix.skewY() threw exception SyntaxError: Not enough arguments.
+PASS matrix.skewY('aString') threw exception TypeError: Type error.
+PASS matrix.skewY(svgElement) threw exception TypeError: Type error.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dom/SVGMatrix.html b/LayoutTests/svg/dom/SVGMatrix.html
new file mode 100644
index 0000000..9a1c2c6
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGMatrix.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGMatrix.js"></script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dom/SVGPoint-expected.txt b/LayoutTests/svg/dom/SVGPoint-expected.txt
index 992ab1a..1aed6cb 100644
--- a/LayoutTests/svg/dom/SVGPoint-expected.txt
+++ b/LayoutTests/svg/dom/SVGPoint-expected.txt
@@ -19,6 +19,21 @@ PASS point.y = null is null
 Check that the point is still containing the correct values
 PASS point.x is 100
 PASS point.y is 0
+
+Reset to -50, 100
+
+Check 'matrixTransform' method - multiply with -1,0,0,2,10,10 matrix, should flip x coordinate, multiply y by two and translate each coordinate by 10
+PASS (newPoint = point.matrixTransform(ctm)).toString() is "[object SVGPoint]"
+PASS newPoint.x is 60
+PASS newPoint.y is 210
+
+Check invalid arguments for 'matrixTransform'
+PASS point.matrixTransform() threw exception SyntaxError: Not enough arguments.
+PASS point.matrixTransform(-1) threw exception TypeError: Type error.
+PASS point.matrixTransform(5) threw exception TypeError: Type error.
+PASS point.matrixTransform('aString') threw exception TypeError: Type error.
+PASS point.matrixTransform(point) threw exception TypeError: Type error.
+PASS point.matrixTransform(svgElement) threw exception TypeError: Type error.
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/LayoutTests/svg/dom/SVGTransform-expected.txt b/LayoutTests/svg/dom/SVGTransform-expected.txt
new file mode 100644
index 0000000..5f8c178
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGTransform-expected.txt
@@ -0,0 +1,115 @@
+This test checks the SVGTransform API
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Check initial transform values
+PASS transform.type is SVGTransform.SVG_TRANSFORM_MATRIX
+PASS transform.angle is 0
+PASS transform.matrix.a is 1
+PASS transform.matrix.b is 0
+PASS transform.matrix.c is 0
+PASS transform.matrix.d is 1
+PASS transform.matrix.e is 0
+PASS transform.matrix.f is 0
+
+Change to skewX transformation
+PASS transform.setSkewX(45) is undefined.
+PASS transform.type is SVGTransform.SVG_TRANSFORM_SKEWX
+PASS transform.angle is 45
+PASS transform.matrix.a is 1
+PASS transform.matrix.b is 0
+PASS transform.matrix.c.toFixed(1) is "1.0"
+PASS transform.matrix.d is 1
+PASS transform.matrix.e is 0
+PASS transform.matrix.f is 0
+
+Changing matrix.e to 100, should reset transformation type to MATRIX, and angle should be 0
+PASS transform.matrix.e = 100 is 100
+PASS transform.type is SVGTransform.SVG_TRANSFORM_MATRIX
+PASS transform.angle is 0
+PASS transform.matrix.a is 1
+PASS transform.matrix.b is 0
+PASS transform.matrix.c.toFixed(1) is "1.0"
+PASS transform.matrix.d is 1
+PASS transform.matrix.e is 100
+PASS transform.matrix.f is 0
+
+Now revert to initial matrix
+PASS transform.matrix.c = null is null
+PASS transform.matrix.e = 0 is 0
+PASS transform.type is SVGTransform.SVG_TRANSFORM_MATRIX
+PASS transform.angle is 0
+PASS transform.matrix.a is 1
+PASS transform.matrix.b is 0
+PASS transform.matrix.c is 0
+PASS transform.matrix.d is 1
+PASS transform.matrix.e is 0
+PASS transform.matrix.f is 0
+
+Check passing invalid arguments to 'setMatrix'
+PASS transform.setMatrix() threw exception SyntaxError: Not enough arguments.
+PASS transform.setMatrix(transform) threw exception TypeError: Type error.
+PASS transform.setMatrix(svgElement) threw exception TypeError: Type error.
+PASS transform.setMatrix('aString') threw exception TypeError: Type error.
+PASS transform.setMatrix(1) threw exception TypeError: Type error.
+PASS transform.setMatrix(false) threw exception TypeError: Type error.
+
+Check passing invalid arguments to 'setTranslate'
+PASS transform.setTranslate() threw exception SyntaxError: Not enough arguments.
+PASS transform.setTranslate(transform) threw exception SyntaxError: Not enough arguments.
+PASS transform.setTranslate(svgElement) threw exception SyntaxError: Not enough arguments.
+PASS transform.setTranslate('aString') threw exception SyntaxError: Not enough arguments.
+PASS transform.setTranslate(1, transform) threw exception TypeError: Type error.
+PASS transform.setTranslate(1, svgElement) threw exception TypeError: Type error.
+PASS transform.setTranslate(1, 'aString') threw exception TypeError: Type error.
+PASS transform.setTranslate(transform, 1) threw exception TypeError: Type error.
+PASS transform.setTranslate(svgElement, 1) threw exception TypeError: Type error.
+PASS transform.setTranslate('aString', 1) threw exception TypeError: Type error.
+PASS transform.setTranslate(transform, transform) threw exception TypeError: Type error.
+PASS transform.setTranslate(svgElement, svgElement) threw exception TypeError: Type error.
+PASS transform.setTranslate('aString', 'aString') threw exception TypeError: Type error.
+
+Check passing invalid arguments to 'setScale'
+PASS transform.setScale() threw exception SyntaxError: Not enough arguments.
+PASS transform.setScale(transform) threw exception SyntaxError: Not enough arguments.
+PASS transform.setScale(svgElement) threw exception SyntaxError: Not enough arguments.
+PASS transform.setScale('aString') threw exception SyntaxError: Not enough arguments.
+PASS transform.setScale(1, transform) threw exception TypeError: Type error.
+PASS transform.setScale(1, svgElement) threw exception TypeError: Type error.
+PASS transform.setScale(1, 'aString') threw exception TypeError: Type error.
+PASS transform.setScale(transform, 1) threw exception TypeError: Type error.
+PASS transform.setScale(svgElement, 1) threw exception TypeError: Type error.
+PASS transform.setScale('aString', 1) threw exception TypeError: Type error.
+PASS transform.setScale(transform, transform) threw exception TypeError: Type error.
+PASS transform.setScale(svgElement, svgElement) threw exception TypeError: Type error.
+PASS transform.setScale('aString', 'aString') threw exception TypeError: Type error.
+
+Check passing invalid arguments to 'setRotate'
+PASS transform.setRotate() threw exception SyntaxError: Not enough arguments.
+PASS transform.setRotate(transform) threw exception SyntaxError: Not enough arguments.
+PASS transform.setRotate(svgElement) threw exception SyntaxError: Not enough arguments.
+PASS transform.setRotate('aString') threw exception SyntaxError: Not enough arguments.
+PASS transform.setRotate(1, transform) threw exception SyntaxError: Not enough arguments.
+PASS transform.setRotate(1, svgElement) threw exception SyntaxError: Not enough arguments.
+PASS transform.setRotate(1, 'aString') threw exception SyntaxError: Not enough arguments.
+PASS transform.setRotate(1, 1, transform) threw exception TypeError: Type error.
+PASS transform.setRotate(1, 1, svgElement) threw exception TypeError: Type error.
+PASS transform.setRotate(1, 1, 'aString') threw exception TypeError: Type error.
+
+Check passing invalid arguments to 'setSkewX'
+PASS transform.setSkewX() threw exception SyntaxError: Not enough arguments.
+PASS transform.setSkewX(transform) threw exception TypeError: Type error.
+PASS transform.setSkewX(svgElement) threw exception TypeError: Type error.
+PASS transform.setSkewX('aString') threw exception TypeError: Type error.
+
+Check passing invalid arguments to 'setSkewY'
+PASS transform.setSkewY() threw exception SyntaxError: Not enough arguments.
+PASS transform.setSkewY(transform) threw exception TypeError: Type error.
+PASS transform.setSkewY(svgElement) threw exception TypeError: Type error.
+PASS transform.setSkewY('aString') threw exception TypeError: Type error.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dom/SVGTransform.html b/LayoutTests/svg/dom/SVGTransform.html
new file mode 100644
index 0000000..659421c
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGTransform.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGTransform.js"></script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dom/SVGTransformList-expected.txt b/LayoutTests/svg/dom/SVGTransformList-expected.txt
new file mode 100644
index 0000000..ca338f4
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGTransformList-expected.txt
@@ -0,0 +1,17 @@
+This test checks the SVGTransformList API
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Check passing invalid arguments to 'createSVGTransformFromMatrix'
+PASS transform.createSVGTransformFromMatrix() threw exception SyntaxError: Not enough arguments.
+PASS transform.createSVGTransformFromMatrix(svgElement.createSVGTransform()) threw exception TypeError: Type error.
+PASS transform.createSVGTransformFromMatrix(svgElement) threw exception TypeError: Type error.
+PASS transform.createSVGTransformFromMatrix('aString') threw exception TypeError: Type error.
+PASS transform.createSVGTransformFromMatrix(1) threw exception TypeError: Type error.
+PASS transform.createSVGTransformFromMatrix(true) threw exception TypeError: Type error.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dom/SVGTransformList.html b/LayoutTests/svg/dom/SVGTransformList.html
new file mode 100644
index 0000000..f539edd
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGTransformList.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGTransformList.js"></script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dom/script-tests/SVGMatrix.js b/LayoutTests/svg/dom/script-tests/SVGMatrix.js
new file mode 100644
index 0000000..fdb6ba3
--- /dev/null
+++ b/LayoutTests/svg/dom/script-tests/SVGMatrix.js
@@ -0,0 +1,140 @@
+description("This test checks the SVGMatrix API");
+
+var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
+var matrix = svgElement.createSVGMatrix();
+
+debug("");
+debug("Check initial matrix values");
+shouldBe("matrix.a", "1");
+shouldBe("matrix.b", "0");
+shouldBe("matrix.c", "0");
+shouldBe("matrix.d", "1");
+shouldBe("matrix.e", "0");
+shouldBe("matrix.f", "0");
+
+debug("");
+debug("Check assigning matrices");
+shouldBe("matrix.a = 2", "2");
+shouldBe("matrix.f = 200", "200");
+
+debug("");
+debug("Check assigning invalid matrices");
+shouldThrow("matrix.a = matrix");
+shouldThrow("matrix.a = svgElement");
+shouldThrow("matrix.a = 'aString'");
+
+shouldThrow("matrix.b = matrix");
+shouldThrow("matrix.b = svgElement");
+shouldThrow("matrix.b = 'aString'");
+
+shouldThrow("matrix.c = matrix");
+shouldThrow("matrix.c = svgElement");
+shouldThrow("matrix.c = 'aString'");
+
+shouldThrow("matrix.d = matrix");
+shouldThrow("matrix.d = svgElement");
+shouldThrow("matrix.d = 'aString'");
+
+shouldThrow("matrix.e = matrix");
+shouldThrow("matrix.e = svgElement");
+shouldThrow("matrix.e = 'aString'");
+
+shouldThrow("matrix.f = matrix");
+shouldThrow("matrix.f = svgElement");
+shouldThrow("matrix.f = 'aString'");
+
+debug("");
+debug("Check that the matrix is still containing the correct values");
+shouldBe("matrix.a", "2");
+shouldBe("matrix.b", "0");
+shouldBe("matrix.c", "0");
+shouldBe("matrix.d", "1");
+shouldBe("matrix.e", "0");
+shouldBe("matrix.f", "200");
+
+debug("");
+debug("Check assigning null works as expected");
+shouldBeNull("matrix.f = null");
+shouldBe("matrix.a", "2");
+shouldBe("matrix.b", "0");
+shouldBe("matrix.c", "0");
+shouldBe("matrix.d", "1");
+shouldBe("matrix.e", "0");
+shouldBe("matrix.f", "0");
+
+debug("");
+debug("Check calling 'multiply' with invalid arguments");
+shouldThrow("matrix.multiply()");
+shouldThrow("matrix.multiply(true)");
+shouldThrow("matrix.multiply(2)");
+shouldThrow("matrix.multiply('aString')");
+shouldThrow("matrix.multiply(svgElement)");
+
+debug("");
+debug("Check calling 'translate' with invalid arguments");
+shouldThrow("matrix.translate()");
+shouldThrow("matrix.translate(true)");
+shouldThrow("matrix.translate(2)");
+shouldThrow("matrix.translate('aString')");
+shouldThrow("matrix.translate(svgElement)");
+shouldThrow("matrix.translate('aString', 'aString')");
+shouldThrow("matrix.translate(svgElement, svgElement)");
+shouldThrow("matrix.translate(2, 'aString')");
+shouldThrow("matrix.translate(2, svgElement)");
+shouldThrow("matrix.translate('aString', 2)");
+shouldThrow("matrix.translate(svgElement, 2)");
+
+debug("");
+debug("Check calling 'scale' with invalid arguments");
+shouldThrow("matrix.scale()");
+shouldThrow("matrix.scale('aString')");
+shouldThrow("matrix.scale(svgElement)");
+
+
+debug("");
+debug("Check calling 'scaleNonUniform' with invalid arguments");
+shouldThrow("matrix.scaleNonUniform()");
+shouldThrow("matrix.scaleNonUniform(true)");
+shouldThrow("matrix.scaleNonUniform(2)");
+shouldThrow("matrix.scaleNonUniform('aString')");
+shouldThrow("matrix.scaleNonUniform(svgElement)");
+shouldThrow("matrix.scaleNonUniform('aString', 'aString')");
+shouldThrow("matrix.scaleNonUniform(svgElement, svgElement)");
+shouldThrow("matrix.scaleNonUniform(2, 'aString')");
+shouldThrow("matrix.scaleNonUniform(2, svgElement)");
+shouldThrow("matrix.scaleNonUniform('aString', 2)");
+shouldThrow("matrix.scaleNonUniform(svgElement, 2)");
+
+debug("");
+debug("Check calling 'rotate' with invalid arguments");
+shouldThrow("matrix.rotate()");
+shouldThrow("matrix.rotate('aString')");
+shouldThrow("matrix.rotate(svgElement)");
+
+debug("");
+debug("Check calling 'rotateFromVector' with invalid arguments");
+shouldThrow("matrix.rotateFromVector()");
+shouldThrow("matrix.rotateFromVector(true)");
+shouldThrow("matrix.rotateFromVector(2)");
+shouldThrow("matrix.rotateFromVector('aString')");
+shouldThrow("matrix.rotateFromVector(svgElement)");
+shouldThrow("matrix.rotateFromVector('aString', 'aString')");
+shouldThrow("matrix.rotateFromVector(svgElement, svgElement)");
+shouldThrow("matrix.rotateFromVector(2, 'aString')");
+shouldThrow("matrix.rotateFromVector(2, svgElement)");
+shouldThrow("matrix.rotateFromVector('aString', 2)");
+shouldThrow("matrix.rotateFromVector(svgElement, 2)");
+
+debug("");
+debug("Check calling 'skewX' with invalid arguments");
+shouldThrow("matrix.skewX()");
+shouldThrow("matrix.skewX('aString')");
+shouldThrow("matrix.skewX(svgElement)");
+
+debug("");
+debug("Check calling 'skewY' with invalid arguments");
+shouldThrow("matrix.skewY()");
+shouldThrow("matrix.skewY('aString')");
+shouldThrow("matrix.skewY(svgElement)");
+
+successfullyParsed = true;
diff --git a/LayoutTests/svg/dom/script-tests/SVGPoint.js b/LayoutTests/svg/dom/script-tests/SVGPoint.js
index 1a38a3d..bcd78d2 100644
--- a/LayoutTests/svg/dom/script-tests/SVGPoint.js
+++ b/LayoutTests/svg/dom/script-tests/SVGPoint.js
@@ -23,4 +23,29 @@ debug("Check that the point is still containing the correct values");
 shouldBe("point.x", "100");
 shouldBe("point.y", "0");
 
+debug("");
+debug("Reset to -50, 100");
+point.x = -50;
+point.y = 100;
+
+debug("");
+debug("Check 'matrixTransform' method - multiply with -1,0,0,2,10,10 matrix, should flip x coordinate, multiply y by two and translate each coordinate by 10");
+var ctm = svgElement.createSVGMatrix();
+ctm.a = -1;
+ctm.d = 2;
+ctm.e = 10;
+ctm.f = 10;
+shouldBeEqualToString("(newPoint = point.matrixTransform(ctm)).toString()", "[object SVGPoint]");
+shouldBe("newPoint.x", "60");
+shouldBe("newPoint.y", "210");
+
+debug("");
+debug("Check invalid arguments for 'matrixTransform'");
+shouldThrow("point.matrixTransform()");
+shouldThrow("point.matrixTransform(-1)");
+shouldThrow("point.matrixTransform(5)");
+shouldThrow("point.matrixTransform('aString')");
+shouldThrow("point.matrixTransform(point)");
+shouldThrow("point.matrixTransform(svgElement)");
+
 successfullyParsed = true;
diff --git a/LayoutTests/svg/dom/script-tests/SVGTransform.js b/LayoutTests/svg/dom/script-tests/SVGTransform.js
new file mode 100644
index 0000000..65a587c
--- /dev/null
+++ b/LayoutTests/svg/dom/script-tests/SVGTransform.js
@@ -0,0 +1,122 @@
+description("This test checks the SVGTransform API");
+
+var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
+var transform = svgElement.createSVGTransform();
+
+debug("");
+debug("Check initial transform values");
+shouldBe("transform.type", "SVGTransform.SVG_TRANSFORM_MATRIX");
+shouldBe("transform.angle", "0");
+shouldBe("transform.matrix.a", "1");
+shouldBe("transform.matrix.b", "0");
+shouldBe("transform.matrix.c", "0");
+shouldBe("transform.matrix.d", "1");
+shouldBe("transform.matrix.e", "0");
+shouldBe("transform.matrix.f", "0");
+
+debug("");
+debug("Change to skewX transformation");
+shouldBeUndefined("transform.setSkewX(45)");
+shouldBe("transform.type", "SVGTransform.SVG_TRANSFORM_SKEWX");
+shouldBe("transform.angle", "45");
+shouldBe("transform.matrix.a", "1");
+shouldBe("transform.matrix.b", "0");
+shouldBeEqualToString("transform.matrix.c.toFixed(1)", "1.0");
+shouldBe("transform.matrix.d", "1");
+shouldBe("transform.matrix.e", "0");
+shouldBe("transform.matrix.f", "0");
+
+debug("");
+debug("Changing matrix.e to 100, should reset transformation type to MATRIX, and angle should be 0");
+shouldBe("transform.matrix.e = 100", "100");
+shouldBe("transform.type", "SVGTransform.SVG_TRANSFORM_MATRIX");
+shouldBe("transform.angle", "0");
+shouldBe("transform.matrix.a", "1");
+shouldBe("transform.matrix.b", "0");
+shouldBeEqualToString("transform.matrix.c.toFixed(1)", "1.0");
+shouldBe("transform.matrix.d", "1");
+shouldBe("transform.matrix.e", "100");
+shouldBe("transform.matrix.f", "0");
+
+debug("");
+debug("Now revert to initial matrix");
+shouldBeNull("transform.matrix.c = null");
+shouldBe("transform.matrix.e = 0", "0");
+shouldBe("transform.type", "SVGTransform.SVG_TRANSFORM_MATRIX");
+shouldBe("transform.angle", "0");
+shouldBe("transform.matrix.a", "1");
+shouldBe("transform.matrix.b", "0");
+shouldBe("transform.matrix.c", "0");
+shouldBe("transform.matrix.d", "1");
+shouldBe("transform.matrix.e", "0");
+shouldBe("transform.matrix.f", "0");
+
+debug("");
+debug("Check passing invalid arguments to 'setMatrix'");
+shouldThrow("transform.setMatrix()");
+shouldThrow("transform.setMatrix(transform)");
+shouldThrow("transform.setMatrix(svgElement)");
+shouldThrow("transform.setMatrix('aString')");
+shouldThrow("transform.setMatrix(1)");
+shouldThrow("transform.setMatrix(false)");
+
+debug("");
+debug("Check passing invalid arguments to 'setTranslate'");
+shouldThrow("transform.setTranslate()");
+shouldThrow("transform.setTranslate(transform)");
+shouldThrow("transform.setTranslate(svgElement)");
+shouldThrow("transform.setTranslate('aString')");
+shouldThrow("transform.setTranslate(1, transform)");
+shouldThrow("transform.setTranslate(1, svgElement)");
+shouldThrow("transform.setTranslate(1, 'aString')");
+shouldThrow("transform.setTranslate(transform, 1)");
+shouldThrow("transform.setTranslate(svgElement, 1)");
+shouldThrow("transform.setTranslate('aString', 1)");
+shouldThrow("transform.setTranslate(transform, transform)");
+shouldThrow("transform.setTranslate(svgElement, svgElement)");
+shouldThrow("transform.setTranslate('aString', 'aString')");
+
+debug("");
+debug("Check passing invalid arguments to 'setScale'");
+shouldThrow("transform.setScale()");
+shouldThrow("transform.setScale(transform)");
+shouldThrow("transform.setScale(svgElement)");
+shouldThrow("transform.setScale('aString')");
+shouldThrow("transform.setScale(1, transform)");
+shouldThrow("transform.setScale(1, svgElement)");
+shouldThrow("transform.setScale(1, 'aString')");
+shouldThrow("transform.setScale(transform, 1)");
+shouldThrow("transform.setScale(svgElement, 1)");
+shouldThrow("transform.setScale('aString', 1)");
+shouldThrow("transform.setScale(transform, transform)");
+shouldThrow("transform.setScale(svgElement, svgElement)");
+shouldThrow("transform.setScale('aString', 'aString')");
+
+debug("");
+debug("Check passing invalid arguments to 'setRotate'");
+shouldThrow("transform.setRotate()");
+shouldThrow("transform.setRotate(transform)");
+shouldThrow("transform.setRotate(svgElement)");
+shouldThrow("transform.setRotate('aString')");
+shouldThrow("transform.setRotate(1, transform)");
+shouldThrow("transform.setRotate(1, svgElement)");
+shouldThrow("transform.setRotate(1, 'aString')");
+shouldThrow("transform.setRotate(1, 1, transform)");
+shouldThrow("transform.setRotate(1, 1, svgElement)");
+shouldThrow("transform.setRotate(1, 1, 'aString')");
+
+debug("");
+debug("Check passing invalid arguments to 'setSkewX'");
+shouldThrow("transform.setSkewX()");
+shouldThrow("transform.setSkewX(transform)");
+shouldThrow("transform.setSkewX(svgElement)");
+shouldThrow("transform.setSkewX('aString')");
+
+debug("");
+debug("Check passing invalid arguments to 'setSkewY'");
+shouldThrow("transform.setSkewY()");
+shouldThrow("transform.setSkewY(transform)");
+shouldThrow("transform.setSkewY(svgElement)");
+shouldThrow("transform.setSkewY('aString')");
+
+successfullyParsed = true;
diff --git a/LayoutTests/svg/dom/script-tests/SVGTransformList.js b/LayoutTests/svg/dom/script-tests/SVGTransformList.js
new file mode 100644
index 0000000..f5fd92f
--- /dev/null
+++ b/LayoutTests/svg/dom/script-tests/SVGTransformList.js
@@ -0,0 +1,16 @@
+description("This test checks the SVGTransformList API");
+
+var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
+var rectElement = document.createElementNS("http://www.w3.org/2000/svg", "rect");
+var transform = rectElement.transform.baseVal;
+
+debug("");
+debug("Check passing invalid arguments to 'createSVGTransformFromMatrix'");
+shouldThrow("transform.createSVGTransformFromMatrix()");
+shouldThrow("transform.createSVGTransformFromMatrix(svgElement.createSVGTransform())");
+shouldThrow("transform.createSVGTransformFromMatrix(svgElement)");
+shouldThrow("transform.createSVGTransformFromMatrix('aString')");
+shouldThrow("transform.createSVGTransformFromMatrix(1)");
+shouldThrow("transform.createSVGTransformFromMatrix(true)");
+
+successfullyParsed = true;
diff --git a/WebCore/Android.jscbindings.mk b/WebCore/Android.jscbindings.mk
index 008a837..f304bd3 100644
--- a/WebCore/Android.jscbindings.mk
+++ b/WebCore/Android.jscbindings.mk
@@ -146,7 +146,6 @@ LOCAL_SRC_FILES += \
 	bindings/js/JSSQLTransactionCustom.cpp \
 	bindings/js/JSSVGElementInstanceCustom.cpp \
 	bindings/js/JSSVGLengthCustom.cpp \
-	bindings/js/JSSVGMatrixCustom.cpp \
 	bindings/js/JSSVGPathSegCustom.cpp \
 	bindings/js/JSSVGPathSegListCustom.cpp \
 	bindings/js/JSSharedWorkerCustom.cpp \
diff --git a/WebCore/Android.v8bindings.mk b/WebCore/Android.v8bindings.mk
index 87c6a7d..14f4fb8 100644
--- a/WebCore/Android.v8bindings.mk
+++ b/WebCore/Android.v8bindings.mk
@@ -155,7 +155,6 @@ LOCAL_SRC_FILES += \
 	bindings/v8/custom/V8SVGDocumentCustom.cpp \
 	bindings/v8/custom/V8SVGElementCustom.cpp \
 	bindings/v8/custom/V8SVGLengthCustom.cpp \
-	bindings/v8/custom/V8SVGMatrixCustom.cpp
 	bindings/v8/custom/V8SVGPathSegCustom.cpp \
 endif
 
diff --git a/WebCore/CMakeLists.txt b/WebCore/CMakeLists.txt
index 97a3d2e..70c9cb0 100644
--- a/WebCore/CMakeLists.txt
+++ b/WebCore/CMakeLists.txt
@@ -1715,7 +1715,6 @@ IF (ENABLE_SVG)
     LIST(APPEND WebCore_SOURCES
         bindings/js/JSSVGElementInstanceCustom.cpp
         bindings/js/JSSVGLengthCustom.cpp
-        bindings/js/JSSVGMatrixCustom.cpp
         bindings/js/JSSVGPathSegCustom.cpp
         bindings/js/JSSVGPathSegListCustom.cpp
         css/SVGCSSComputedStyleDeclaration.cpp
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index e3d7d2b..a31b01f 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,141 @@
+2010-11-10  Nikolas Zimmermann  <nzimmermann at rim.com>
+
+        Reviewed by Dirk Schulze.
+
+        Convert SVGMatrix/SVGTransform/SVGTransformList to the new SVGPropertyTearOff concept
+        https://bugs.webkit.org/show_bug.cgi?id=49311
+
+        Move the last list type, SVGTransformList, and the last POD types, SVGMatrix & SVGTransform, over to the new SVGPropertyTearOff concept.
+        Removes the need for a custom JSSVGMatrix/V8SVGMatrix implementation, it's all integrated within the bindings now.
+
+        Tests: svg/W3C-SVG-1.1-SE/coords-dom-01-f.svg
+               svg/W3C-SVG-1.1-SE/coords-dom-02-f.svg
+               svg/W3C-SVG-1.1-SE/coords-dom-03-f.svg
+               svg/W3C-SVG-1.1-SE/coords-dom-04-f.svg
+               svg/W3C-SVG-1.1-SE/types-dom-01-b.svg
+               svg/W3C-SVG-1.1-SE/types-dom-02-f.svg
+               svg/W3C-SVG-1.1-SE/types-dom-03-b.svg
+               svg/W3C-SVG-1.1-SE/types-dom-04-b.svg
+               svg/W3C-SVG-1.1-SE/types-dom-05-b.svg
+               svg/dom/SVGMatrix.html
+               svg/dom/SVGTransform.html
+               svg/dom/SVGTransformList.html
+
+        * Android.jscbindings.mk: Removed JSSVGMatrixCustom.cpp.
+        * Android.v8bindings.mk: Removed V8SVGMatrixCustom.cpp.
+        * CMakeLists.txt: Remove JSSVGMatrixCustom.cpp. 
+        * GNUmakefile.am: Ditto. Add SVGAnimatedTransformListPropertyTearOff.h/SVGStaticPropertyWithParentTearOff.h/SVGTransformListPropertyTearOff.h/SVGAnimatedTransformList.h/SVGMatrix.h to build.
+        * WebCore.gypi: Ditto.
+        * WebCore.pro: Ditto.
+        * WebCore.vcproj/WebCore.vcproj: Ditto.
+        * WebCore.xcodeproj/project.pbxproj: Ditto.
+        * bindings/js/JSBindingsAllInOne.cpp: Remove JSSVGMatrixCustom.cpp
+        * bindings/js/JSSVGMatrixCustom.cpp: Removed.
+        * bindings/scripts/CodeGenerator.pm: Convert SVGMatrix/SVGTransform/SVGTransformList to the new concept.
+        * bindings/scripts/CodeGeneratorJS.pm: Ditto.
+        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
+        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
+        * bindings/v8/custom/V8SVGMatrixCustom.cpp: Removed.
+        * svg/DeprecatedSVGAnimatedPropertyTraits.h: Remove SVGTransformList handling.
+        * svg/DeprecatedSVGAnimatedTemplate.h: Ditto.
+        * svg/SVGAnimateTransformElement.cpp: Adapt to SVGTransformList API changes.
+        (WebCore::transformListFor):
+        (WebCore::SVGAnimateTransformElement::resetToBaseValue):
+        (WebCore::SVGAnimateTransformElement::calculateAnimatedValue):
+        (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
+        * svg/SVGAnimatedTransformList.h: Added.
+        * svg/SVGGradientElement.cpp: Ditto.
+        (WebCore::SVGGradientElement::SVGGradientElement):
+        (WebCore::SVGGradientElement::parseMappedAttribute):
+        * svg/SVGGradientElement.h: Ditto.
+        * svg/SVGLinearGradientElement.cpp: Ditto.
+        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
+        * svg/SVGMatrix.h: Added. SVGMatrix inherits from AffineTransform, and is only used in the bindings. It implements SVGs special requirements.
+        (WebCore::SVGMatrix::translate): Returns a copy of the matrix, not affecting the original matrix.
+        (WebCore::SVGMatrix::scale): Ditto.
+        (WebCore::SVGMatrix::scaleNonUniform): Ditto.
+        (WebCore::SVGMatrix::rotate): Ditto.
+        (WebCore::SVGMatrix::flipX): Ditto.
+        (WebCore::SVGMatrix::flipY): Ditto.
+        (WebCore::SVGMatrix::skewX): Ditto.
+        (WebCore::SVGMatrix::skewY): Ditto.
+        (WebCore::SVGMatrix::multiply): Ditto.
+        (WebCore::SVGMatrix::inverse): Ditto.
+        (WebCore::SVGMatrix::rotateFromVector): Dittto.
+        * svg/SVGMatrix.idl: Enable StrictTypeChecking/RequiresAllArguments=Raise on all attributes/functions.
+        * svg/SVGPatternElement.cpp: Adapt to SVGTransformList API changes.
+        (WebCore::SVGPatternElement::SVGPatternElement):
+        (WebCore::SVGPatternElement::parseMappedAttribute):
+        (WebCore::SVGPatternElement::collectPatternAttributes):
+        * svg/SVGPatternElement.h: Ditto.
+        * svg/SVGPoint.idl: Enable StrictTypeChecking/RequiresAllArguments=Raise for 'matrixTransform', now that SVGMatrix has been converted to the new scheme.
+        * svg/SVGRadialGradientElement.cpp: Adapt to SVGTransformList API changes.
+        (WebCore::SVGRadialGradientElement::collectGradientAttributes):
+        * svg/SVGSVGElement.cpp: Ditto.
+        (WebCore::SVGSVGElement::createSVGTransformFromMatrix):
+        (WebCore::SVGSVGElement::viewBoxToViewTransform):
+        * svg/SVGSVGElement.h: Ditto.
+        * svg/SVGStyledTransformableElement.cpp: Ditto.
+        (WebCore::SVGStyledTransformableElement::SVGStyledTransformableElement):
+        (WebCore::SVGStyledTransformableElement::animatedLocalTransform):
+        (WebCore::SVGStyledTransformableElement::parseMappedAttribute):
+        * svg/SVGStyledTransformableElement.h: Ditto.
+        * svg/SVGTextElement.cpp: Ditto.
+        (WebCore::SVGTextElement::SVGTextElement):
+        (WebCore::SVGTextElement::parseMappedAttribute):
+        (WebCore::SVGTextElement::animatedLocalTransform):
+        * svg/SVGTextElement.h: Ditto.
+        * svg/SVGTransform.cpp: Modernize code, inlined some getters.
+        (WebCore::SVGTransform::SVGTransform):
+        (WebCore::SVGTransform::setMatrix):
+        * svg/SVGTransform.h: Reindent header.
+        (WebCore::SVGTransform::type):
+        (WebCore::SVGTransform::svgMatrix):
+        (WebCore::SVGTransform::matrix):
+        (WebCore::SVGTransform::angle):
+        (WebCore::SVGTransform::rotationCenter):
+        (WebCore::SVGTransform::isValid):
+        (WebCore::operator==): Avoid function calls, make operator== a friend of SVGTransform, and compare members directly.
+        (WebCore::operator!=):
+        * svg/SVGTransform.idl:
+        * svg/SVGTransformList.cpp: Rewritten as plain Vector<SVGTransform>.
+        (WebCore::SVGTransformList::createSVGTransformFromMatrix):
+        (WebCore::SVGTransformList::consolidate):
+        (WebCore::SVGTransformList::concatenate):
+        (WebCore::SVGTransformList::valueAsString):
+        * svg/SVGTransformList.h:
+        (WebCore::SVGTransformList::SVGTransformList):
+        * svg/SVGTransformList.idl: Enable StrictTypeChecking/RequiresAllArguments=Raise on all attributes/functions.
+        * svg/SVGTransformable.cpp: Adapt to SVGTransformList API changes.
+        (WebCore::SVGTransformable::parseTransformAttribute):
+        * svg/SVGTransformable.h: Ditto.
+        * svg/SVGViewSpec.cpp: Ditto.
+        (WebCore::SVGViewSpec::SVGViewSpec):
+        (WebCore::SVGViewSpec::setTransform):
+        (WebCore::SVGViewSpec::parseViewSpec):
+        * svg/SVGViewSpec.h: Ditto.
+        (WebCore::SVGViewSpec::transform):
+        * svg/properties/SVGAnimatedListPropertyTearOff.h: Made constructor and members protected.
+        * svg/properties/SVGAnimatedPropertyMacros.h: Add new helper macro DECLARE_ANIMATED_TRANSFORM_LIST_PROPERTY. This is needed until we expand all macros.
+        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h: Added. Extends SVGAnimatedListPropertyTearOff, returning SVGTransformListPropertyTearOff objects.
+        (WebCore::SVGAnimatedTransformListPropertyTearOff::baseVal):
+        (WebCore::SVGAnimatedTransformListPropertyTearOff::animVal):
+        (WebCore::SVGAnimatedTransformListPropertyTearOff::create):
+        (WebCore::SVGAnimatedTransformListPropertyTearOff::SVGAnimatedTransformListPropertyTearOff):
+        * svg/properties/SVGListPropertyTearOff.h: Made construct and members protected.
+        * svg/properties/SVGProperty.h: Declare commitChange() as pure virtual method.
+        * svg/properties/SVGPropertyTraits.h: Handle SVGTransformList.
+        * svg/properties/SVGStaticPropertyWithParentTearOff.h: Added. Same concept as JSSVGStaticPODTypeWrapperWithParent, used to expose SVGPropertyTearOffs for types
+                                                               that are using this concept themselves. (SVGMatrix attribute of SVGTransform, both are POD types, using SVGPropertyTearOff).
+        (WebCore::SVGStaticPropertyWithParentTearOff::create):
+        (WebCore::SVGStaticPropertyWithParentTearOff::commitChange):
+        (WebCore::SVGStaticPropertyWithParentTearOff::SVGStaticPropertyWithParentTearOff):
+        * svg/properties/SVGTransformListPropertyTearOff.h: Added. Extends SVGListPropertyTearOff by two special SVGTransformList methods: consolidate and createSVGTransformFromMatrix.
+        (WebCore::SVGTransformListPropertyTearOff::create):
+        (WebCore::SVGTransformListPropertyTearOff::createSVGTransformFromMatrix):
+        (WebCore::SVGTransformListPropertyTearOff::consolidate):
+        (WebCore::SVGTransformListPropertyTearOff::SVGTransformListPropertyTearOff):
+
 2010-11-11  Alejandro G. Castro  <alex at igalia.com>
 
         Reviewed by Nikolas Zimmermann.
diff --git a/WebCore/GNUmakefile.am b/WebCore/GNUmakefile.am
index 1d1bfdb..270b2a8 100644
--- a/WebCore/GNUmakefile.am
+++ b/WebCore/GNUmakefile.am
@@ -798,7 +798,6 @@ webcore_sources += \
 	WebCore/bindings/js/JSSVGContextCache.h \
 	WebCore/bindings/js/JSSVGElementInstanceCustom.cpp \
 	WebCore/bindings/js/JSSVGLengthCustom.cpp \
-	WebCore/bindings/js/JSSVGMatrixCustom.cpp \
 	WebCore/bindings/js/JSSVGPathSegCustom.cpp \
 	WebCore/bindings/js/JSSVGPathSegListCustom.cpp \
 	WebCore/bindings/js/JSSVGPODListCustom.h \
@@ -3060,6 +3059,7 @@ webcore_sources += \
 	WebCore/svg/properties/SVGAnimatedPropertySynchronizer.h \
 	WebCore/svg/properties/SVGAnimatedPropertyTearOff.h \
 	WebCore/svg/properties/SVGAnimatedStaticPropertyTearOff.h \
+	WebCore/svg/properties/SVGAnimatedTransformListPropertyTearOff.h \
 	WebCore/svg/properties/SVGListProperty.h \
 	WebCore/svg/properties/SVGListPropertyTearOff.h \
 	WebCore/svg/properties/SVGProperty.h \
@@ -3067,6 +3067,8 @@ webcore_sources += \
 	WebCore/svg/properties/SVGPropertyTraits.h \
 	WebCore/svg/properties/SVGStaticListPropertyTearOff.h \
 	WebCore/svg/properties/SVGStaticPropertyTearOff.h \
+	WebCore/svg/properties/SVGStaticPropertyWithParentTearOff.h \
+	WebCore/svg/properties/SVGTransformListPropertyTearOff.h \
 	WebCore/svg/RadialGradientAttributes.h \
 	WebCore/svg/SVGAElement.cpp \
 	WebCore/svg/SVGAElement.h \
@@ -3089,6 +3091,7 @@ webcore_sources += \
 	WebCore/svg/SVGAnimatedPreserveAspectRatio.h \
 	WebCore/svg/SVGAnimatedRect.h \
 	WebCore/svg/SVGAnimatedString.h \
+	WebCore/svg/SVGAnimatedTransformList.h \
 	WebCore/svg/SVGAnimateElement.cpp \
 	WebCore/svg/SVGAnimateElement.h \
 	WebCore/svg/SVGAnimateMotionElement.cpp \
@@ -3231,6 +3234,7 @@ webcore_sources += \
 	WebCore/svg/SVGMarkerElement.h \
 	WebCore/svg/SVGMaskElement.cpp \
 	WebCore/svg/SVGMaskElement.h \
+	WebCore/svg/SVGMatrix.h \
 	WebCore/svg/SVGMetadataElement.cpp \
 	WebCore/svg/SVGMetadataElement.h \
 	WebCore/svg/SVGMissingGlyphElement.cpp \
diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
index f79dbcd..846b6a1 100644
--- a/WebCore/WebCore.gypi
+++ b/WebCore/WebCore.gypi
@@ -677,7 +677,6 @@
             'bindings/js/JSSVGContextCache.h',
             'bindings/js/JSSVGElementInstanceCustom.cpp',
             'bindings/js/JSSVGLengthCustom.cpp',
-            'bindings/js/JSSVGMatrixCustom.cpp',
             'bindings/js/JSSVGPathSegCustom.cpp',
             'bindings/js/JSSVGPathSegListCustom.cpp',
             'bindings/js/JSSVGPODListCustom.h',
@@ -837,7 +836,6 @@
             'bindings/v8/custom/V8SVGDocumentCustom.cpp',
             'bindings/v8/custom/V8SVGElementCustom.cpp',
             'bindings/v8/custom/V8SVGLengthCustom.cpp',
-            'bindings/v8/custom/V8SVGMatrixCustom.cpp',
             'bindings/v8/custom/V8SVGPathSegCustom.cpp',
             'bindings/v8/custom/V8SharedWorkerCustom.cpp',
             'bindings/v8/custom/V8StyleSheetCustom.cpp',
@@ -3974,6 +3972,7 @@
             'svg/properties/SVGAnimatedPropertySynchronizer.h',
             'svg/properties/SVGAnimatedPropertyTearOff.h',
             'svg/properties/SVGAnimatedStaticPropertyTearOff.h',
+            'svg/properties/SVGAnimatedTransformListPropertyTearOff.h',
             'svg/properties/SVGListProperty.h',
             'svg/properties/SVGListPropertyTearOff.h',
             'svg/properties/SVGProperty.h',
@@ -3981,6 +3980,8 @@
             'svg/properties/SVGPropertyTraits.h',
             'svg/properties/SVGStaticListPropertyTearOff.h',
             'svg/properties/SVGStaticPropertyTearOff.h',
+            'svg/properties/SVGStaticPropertyWithParentTearOff.h',
+            'svg/properties/SVGTransformListPropertyTearOff.h',
             'svg/ColorDistance.cpp',
             'svg/ColorDistance.h',
             'svg/DeprecatedSVGAnimatedProperty.h',
@@ -4019,6 +4020,7 @@
             'svg/SVGAnimatedPreserveAspectRatio.h',
             'svg/SVGAnimatedRect.h',
             'svg/SVGAnimatedString.h',
+            'svg/SVGAnimatedTransformList.h',
             'svg/SVGAnimationElement.cpp',
             'svg/SVGAnimationElement.h',
             'svg/SVGCircleElement.cpp',
@@ -4157,6 +4159,7 @@
             'svg/SVGMarkerElement.h',
             'svg/SVGMaskElement.cpp',
             'svg/SVGMaskElement.h',
+            'svg/SVGMatrix.h',
             'svg/SVGMetadataElement.cpp',
             'svg/SVGMetadataElement.h',
             'svg/SVGMissingGlyphElement.cpp',
diff --git a/WebCore/WebCore.pro b/WebCore/WebCore.pro
index 8ca1c1d..e1cd5a1 100644
--- a/WebCore/WebCore.pro
+++ b/WebCore/WebCore.pro
@@ -471,7 +471,6 @@ v8 {
         bindings/v8/custom/V8SVGDocumentCustom.cpp \
         bindings/v8/custom/V8SVGElementCustom.cpp \
         bindings/v8/custom/V8SVGLengthCustom.cpp \
-        bindings/v8/custom/V8SVGMatrixCustom.cpp \
         bindings/v8/custom/V8SVGPathSegCustom.cpp \
         \
         bindings/v8/specialization/V8BindingState.cpp\
@@ -2371,6 +2370,7 @@ HEADERS += \
     svg/properties/SVGAnimatedPropertySynchronizer.h \
     svg/properties/SVGAnimatedPropertyTearOff.h \
     svg/properties/SVGAnimatedStaticPropertyTearOff.h \
+    svg/properties/SVGAnimatedTransformListPropertyTearOff.h \
     svg/properties/SVGListProperty.h \
     svg/properties/SVGListPropertyTearOff.h \
     svg/properties/SVGProperty.h \
@@ -2378,6 +2378,8 @@ HEADERS += \
     svg/properties/SVGPropertyTraits.h \
     svg/properties/SVGStaticListPropertyTearOff.h \
     svg/properties/SVGStaticPropertyTearOff.h \
+    svg/properties/SVGStaticPropertyWithParentTearOff.h \
+    svg/properties/SVGTransformListPropertyTearOff.h \
     svg/SVGAElement.h \
     svg/SVGAltGlyphElement.h \
     svg/SVGAngle.h \
@@ -2394,6 +2396,7 @@ HEADERS += \
     svg/SVGAnimatedPreserveAspectRatio.h \
     svg/SVGAnimatedRect.h \
     svg/SVGAnimatedString.h \
+    svg/SVGAnimatedTransformList.h \
     svg/SVGAnimateElement.h \
     svg/SVGAnimateMotionElement.h \
     svg/SVGAnimateTransformElement.h \
@@ -2463,6 +2466,7 @@ HEADERS += \
     svg/SVGLocatable.h \
     svg/SVGMarkerElement.h \
     svg/SVGMaskElement.h \
+    svg/SVGMatrix.h \
     svg/SVGMetadataElement.h \
     svg/SVGMissingGlyphElement.h \
     svg/SVGMPathElement.h \
@@ -3369,7 +3373,6 @@ contains(DEFINES, ENABLE_SVG=1) {
     # TODO: this-one-is-not-auto-added! FIXME! tmp/SVGElementFactory.cpp \
             bindings/js/JSSVGElementInstanceCustom.cpp \
             bindings/js/JSSVGLengthCustom.cpp \
-            bindings/js/JSSVGMatrixCustom.cpp \
             bindings/js/JSSVGPathSegCustom.cpp \
             bindings/js/JSSVGPathSegListCustom.cpp
     }
diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj
index 0157ad6..47ee579 100644
--- a/WebCore/WebCore.vcproj/WebCore.vcproj
+++ b/WebCore/WebCore.vcproj/WebCore.vcproj
@@ -60251,58 +60251,6 @@
 					</FileConfiguration>
 				</File>
 				<File
-					RelativePath="..\bindings\js\JSSVGMatrixCustom.cpp"
-					>
-					<FileConfiguration
-						Name="Debug|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug_Internal|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug_Cairo|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release_Cairo|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug_All|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-						/>
-					</FileConfiguration>
-				</File>
-				<File
 					RelativePath="..\bindings\js\JSSVGPathSegCustom.cpp"
 					>
 					<FileConfiguration
@@ -61884,6 +61832,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\svg\SVGAnimatedTransformList.h"
+				>
+			</File>
+			<File
 				RelativePath="..\svg\SVGAnimateElement.h"
 				>
 			</File>
@@ -62380,6 +62332,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\svg\SVGMatrix.h"
+				>
+			</File>
+			<File
 				RelativePath="..\svg\SVGMetadataElement.h"
 				>
 			</File>
@@ -62931,6 +62887,10 @@
 					>
 				</File>
 				<File
+					RelativePath="..\svg\properties\SVGAnimatedTransformListPropertyTearOff.h"
+					>
+				</File>
+				<File
 					RelativePath="..\svg\properties\SVGListProperty.h"
 					>
 				</File>
@@ -62958,6 +62918,14 @@
 					RelativePath="..\svg\properties\SVGStaticPropertyTearOff.h"
 					>
 				</File>
+				<File
+					RelativePath="..\svg\properties\SVGStaticPropertyWithParentTearOff.h"
+					>
+				</File>
+				<File
+					RelativePath="..\svg\properties\SVGTransformListPropertyTearOff.h"
+					>
+				</File>
 			</Filter>
 		</Filter>
 		<Filter
diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
index d6acd9e..d68e75f 100644
--- a/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -60,6 +60,7 @@
 		080081970ED3B2DD00C53BC0 /* WMLAnchorElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 080081950ED3B2DD00C53BC0 /* WMLAnchorElement.h */; };
 		0804BF6E0EE09C3B0006C000 /* WMLDoElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0804BF6C0EE09C3B0006C000 /* WMLDoElement.cpp */; };
 		0804BF6F0EE09C3B0006C000 /* WMLDoElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 0804BF6D0EE09C3B0006C000 /* WMLDoElement.h */; };
+		0806E57A12893045007CED32 /* SVGMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 0806E57912893045007CED32 /* SVGMatrix.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		08082373117987C100241DE8 /* RenderSVGResourceContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 08082372117987C100241DE8 /* RenderSVGResourceContainer.h */; };
 		080AEC810ED8708B00DF4CCE /* WMLIntrinsicEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 080AEC7D0ED8708A00DF4CCE /* WMLIntrinsicEvent.cpp */; };
 		080AEC820ED8708B00DF4CCE /* WMLIntrinsicEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 080AEC7E0ED8708B00DF4CCE /* WMLIntrinsicEvent.h */; };
@@ -95,6 +96,7 @@
 		082341C50FCF3A9500D75BD6 /* WMLSelectElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 082341C30FCF3A9400D75BD6 /* WMLSelectElement.cpp */; };
 		082341C60FCF3A9500D75BD6 /* WMLSelectElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 082341C40FCF3A9400D75BD6 /* WMLSelectElement.h */; };
 		0823D159127AD6AC000EBC95 /* SVGAnimatedInteger.h in Headers */ = {isa = PBXBuildFile; fileRef = 0823D158127AD6AC000EBC95 /* SVGAnimatedInteger.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		08250939128BD4D800E2ED8E /* SVGAnimatedTransformList.h in Headers */ = {isa = PBXBuildFile; fileRef = 08250938128BD4D800E2ED8E /* SVGAnimatedTransformList.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		082FCAC4110927CE00CC4821 /* JSSVGContextCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 082FCAC3110927CE00CC4821 /* JSSVGContextCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		083192AA112B43050083C3B9 /* RenderSVGResource.h in Headers */ = {isa = PBXBuildFile; fileRef = 083192A7112B43050083C3B9 /* RenderSVGResource.h */; };
 		083192AB112B43050083C3B9 /* RenderSVGResourceMasker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 083192A8112B43050083C3B9 /* RenderSVGResourceMasker.cpp */; };
@@ -143,6 +145,7 @@
 		08563BD0117865F50012B578 /* RenderSVGResource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08563BCF117865F50012B578 /* RenderSVGResource.cpp */; };
 		085797091278394C00A8EC5F /* SVGAnimatedBoolean.h in Headers */ = {isa = PBXBuildFile; fileRef = 085797081278394C00A8EC5F /* SVGAnimatedBoolean.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		08591AA50F085C4E009BACB1 /* InputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 08591AA40F085C4E009BACB1 /* InputElement.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		085A15931289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 085A15921289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		085AFDC80F2977350061F2B3 /* WMLFormControlElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 085AFDC60F2977350061F2B3 /* WMLFormControlElement.cpp */; };
 		085AFDC90F2977350061F2B3 /* WMLFormControlElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 085AFDC70F2977350061F2B3 /* WMLFormControlElement.h */; settings = {ATTRIBUTES = (); }; };
 		085B05C211FAE16C004D65F6 /* SVGResourcesCycleSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 085B05C011FAE16C004D65F6 /* SVGResourcesCycleSolver.cpp */; };
@@ -234,10 +237,12 @@
 		08C4C51B0EF19A4000E4840F /* WMLImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C4C5170EF19A4000E4840F /* WMLImageLoader.h */; };
 		08C6A7AB117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08C6A7A9117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.cpp */; };
 		08C6A7AC117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C6A7AA117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.h */; };
+		08C7136E128956A3001B107E /* SVGTransformListPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C7136D128956A3001B107E /* SVGTransformListPropertyTearOff.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		08C7A2C710DC7462002D368B /* SVGNames.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 656581E909D1508D000E61D7 /* SVGNames.h */; };
 		08C859C01274575400A5728D /* SVGAnimatedRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C859BF1274575300A5728D /* SVGAnimatedRect.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		08C925190FCC7C4A00480DEC /* FilterEffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08C925170FCC7C4A00480DEC /* FilterEffect.cpp */; };
 		08C9251A0FCC7C4A00480DEC /* FilterEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C925180FCC7C4A00480DEC /* FilterEffect.h */; };
+		08CA3D4412894A3800FFF260 /* SVGStaticPropertyWithParentTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 08CA3D4312894A3800FFF260 /* SVGStaticPropertyWithParentTearOff.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		08CD61BC0ED3929C002DDF51 /* WMLTaskElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08CD61B80ED3929C002DDF51 /* WMLTaskElement.cpp */; };
 		08CD61BD0ED3929C002DDF51 /* WMLTaskElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 08CD61B90ED3929C002DDF51 /* WMLTaskElement.h */; };
 		08D46CE3127AD5FC0089694B /* SVGAnimatedEnumeration.h in Headers */ = {isa = PBXBuildFile; fileRef = 08D46CE2127AD5FC0089694B /* SVGAnimatedEnumeration.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -4226,7 +4231,6 @@
 		B25599A30D00D8BA00BB825C /* SVGImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B255990B0D00D8B900BB825C /* SVGImage.cpp */; };
 		B25599A40D00D8BA00BB825C /* SVGImage.h in Headers */ = {isa = PBXBuildFile; fileRef = B255990C0D00D8B900BB825C /* SVGImage.h */; };
 		B25599A50D00D8BA00BB825C /* EmptyClients.h in Headers */ = {isa = PBXBuildFile; fileRef = B255990D0D00D8B900BB825C /* EmptyClients.h */; };
-		B25DFAAF0B2E2929000E6510 /* JSSVGMatrixCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B25DFAAE0B2E2929000E6510 /* JSSVGMatrixCustom.cpp */; };
 		B262B8040D1F32D000158F09 /* SVGFont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B262B8030D1F32D000158F09 /* SVGFont.cpp */; };
 		B266CD4D0C3AEC6500EB08D2 /* JSSVGException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B266CD4B0C3AEC6500EB08D2 /* JSSVGException.cpp */; };
 		B266CD4E0C3AEC6500EB08D2 /* JSSVGException.h in Headers */ = {isa = PBXBuildFile; fileRef = B266CD4C0C3AEC6500EB08D2 /* JSSVGException.h */; };
@@ -6109,6 +6113,7 @@
 		080081950ED3B2DD00C53BC0 /* WMLAnchorElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLAnchorElement.h; sourceTree = "<group>"; };
 		0804BF6C0EE09C3B0006C000 /* WMLDoElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLDoElement.cpp; sourceTree = "<group>"; };
 		0804BF6D0EE09C3B0006C000 /* WMLDoElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLDoElement.h; sourceTree = "<group>"; };
+		0806E57912893045007CED32 /* SVGMatrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGMatrix.h; sourceTree = "<group>"; };
 		08082372117987C100241DE8 /* RenderSVGResourceContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceContainer.h; sourceTree = "<group>"; };
 		080AEC7D0ED8708A00DF4CCE /* WMLIntrinsicEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLIntrinsicEvent.cpp; sourceTree = "<group>"; };
 		080AEC7E0ED8708B00DF4CCE /* WMLIntrinsicEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLIntrinsicEvent.h; sourceTree = "<group>"; };
@@ -6144,6 +6149,7 @@
 		082341C30FCF3A9400D75BD6 /* WMLSelectElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLSelectElement.cpp; sourceTree = "<group>"; };
 		082341C40FCF3A9400D75BD6 /* WMLSelectElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLSelectElement.h; sourceTree = "<group>"; };
 		0823D158127AD6AC000EBC95 /* SVGAnimatedInteger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedInteger.h; sourceTree = "<group>"; };
+		08250938128BD4D800E2ED8E /* SVGAnimatedTransformList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedTransformList.h; sourceTree = "<group>"; };
 		082FCAC3110927CE00CC4821 /* JSSVGContextCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSVGContextCache.h; sourceTree = "<group>"; };
 		083192A7112B43050083C3B9 /* RenderSVGResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResource.h; sourceTree = "<group>"; };
 		083192A8112B43050083C3B9 /* RenderSVGResourceMasker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceMasker.cpp; sourceTree = "<group>"; };
@@ -6190,6 +6196,7 @@
 		08563BCF117865F50012B578 /* RenderSVGResource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResource.cpp; sourceTree = "<group>"; };
 		085797081278394C00A8EC5F /* SVGAnimatedBoolean.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedBoolean.h; sourceTree = "<group>"; };
 		08591AA40F085C4E009BACB1 /* InputElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputElement.h; sourceTree = "<group>"; };
+		085A15921289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedTransformListPropertyTearOff.h; sourceTree = "<group>"; };
 		085AFDC60F2977350061F2B3 /* WMLFormControlElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLFormControlElement.cpp; sourceTree = "<group>"; };
 		085AFDC70F2977350061F2B3 /* WMLFormControlElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLFormControlElement.h; sourceTree = "<group>"; };
 		085B05C011FAE16C004D65F6 /* SVGResourcesCycleSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGResourcesCycleSolver.cpp; sourceTree = "<group>"; };
@@ -6269,9 +6276,11 @@
 		08C4C5170EF19A4000E4840F /* WMLImageLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLImageLoader.h; sourceTree = "<group>"; };
 		08C6A7A9117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceSolidColor.cpp; sourceTree = "<group>"; };
 		08C6A7AA117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceSolidColor.h; sourceTree = "<group>"; };
+		08C7136D128956A3001B107E /* SVGTransformListPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTransformListPropertyTearOff.h; sourceTree = "<group>"; };
 		08C859BF1274575300A5728D /* SVGAnimatedRect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedRect.h; sourceTree = "<group>"; };
 		08C925170FCC7C4A00480DEC /* FilterEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FilterEffect.cpp; path = filters/FilterEffect.cpp; sourceTree = "<group>"; };
 		08C925180FCC7C4A00480DEC /* FilterEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FilterEffect.h; path = filters/FilterEffect.h; sourceTree = "<group>"; };
+		08CA3D4312894A3800FFF260 /* SVGStaticPropertyWithParentTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGStaticPropertyWithParentTearOff.h; sourceTree = "<group>"; };
 		08CD61B80ED3929C002DDF51 /* WMLTaskElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLTaskElement.cpp; sourceTree = "<group>"; };
 		08CD61B90ED3929C002DDF51 /* WMLTaskElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLTaskElement.h; sourceTree = "<group>"; };
 		08D46CE2127AD5FC0089694B /* SVGAnimatedEnumeration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedEnumeration.h; sourceTree = "<group>"; };
@@ -10228,7 +10237,6 @@
 		B255990B0D00D8B900BB825C /* SVGImage.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGImage.cpp; sourceTree = "<group>"; };
 		B255990C0D00D8B900BB825C /* SVGImage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGImage.h; sourceTree = "<group>"; };
 		B255990D0D00D8B900BB825C /* EmptyClients.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = EmptyClients.h; sourceTree = "<group>"; };
-		B25DFAAE0B2E2929000E6510 /* JSSVGMatrixCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGMatrixCustom.cpp; sourceTree = "<group>"; };
 		B262B8030D1F32D000158F09 /* SVGFont.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGFont.cpp; sourceTree = "<group>"; };
 		B266CD4B0C3AEC6500EB08D2 /* JSSVGException.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGException.cpp; sourceTree = "<group>"; };
 		B266CD4C0C3AEC6500EB08D2 /* JSSVGException.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSSVGException.h; sourceTree = "<group>"; };
@@ -11801,6 +11809,7 @@
 				081CDFBE126ECFE800D215CA /* SVGAnimatedPropertySynchronizer.h */,
 				088A0DFF126EF1DB00978F7A /* SVGAnimatedPropertyTearOff.h */,
 				08525E621278C00100A84778 /* SVGAnimatedStaticPropertyTearOff.h */,
+				085A15921289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h */,
 				0810764312828556007C63BA /* SVGListProperty.h */,
 				088A0E00126EF1DB00978F7A /* SVGListPropertyTearOff.h */,
 				088A0E01126EF1DB00978F7A /* SVGProperty.h */,
@@ -11808,6 +11817,8 @@
 				088A0E03126EF1DB00978F7A /* SVGPropertyTraits.h */,
 				0880F70D1282B46D00948505 /* SVGStaticListPropertyTearOff.h */,
 				0813A4E91284132600992511 /* SVGStaticPropertyTearOff.h */,
+				08CA3D4312894A3800FFF260 /* SVGStaticPropertyWithParentTearOff.h */,
+				08C7136D128956A3001B107E /* SVGTransformListPropertyTearOff.h */,
 			);
 			path = properties;
 			sourceTree = "<group>";
@@ -14545,8 +14556,8 @@
 				93309D95099E64910056E581 /* EditCommand.h */,
 				4F1534DD11B532EC0021FD86 /* EditingBehavior.h */,
 				4F1534DF11B533020021FD86 /* EditingBehaviorTypes.h */,
-				9BAB6C6A12550631001626D4 /* EditingStyle.h */,
 				9BAB6C6B12550631001626D4 /* EditingStyle.cpp */,
+				9BAB6C6A12550631001626D4 /* EditingStyle.h */,
 				4B3043CA0AE0373B00A82647 /* Editor.cpp */,
 				4B3043CB0AE0373B00A82647 /* Editor.h */,
 				93A38B4A0D0E5808006872C2 /* EditorCommand.cpp */,
@@ -16136,6 +16147,7 @@
 				B22277F50D00BF1F0071B782 /* SVGAnimatedRect.idl */,
 				084DB59A128008CC002A6D64 /* SVGAnimatedString.h */,
 				B22277F60D00BF1F0071B782 /* SVGAnimatedString.idl */,
+				08250938128BD4D800E2ED8E /* SVGAnimatedTransformList.h */,
 				B22277F80D00BF1F0071B782 /* SVGAnimatedTransformList.idl */,
 				B22277F90D00BF1F0071B782 /* SVGAnimateElement.cpp */,
 				B22277FA0D00BF1F0071B782 /* SVGAnimateElement.h */,
@@ -16344,6 +16356,7 @@
 				B22278B00D00BF200071B782 /* SVGMaskElement.cpp */,
 				B22278B10D00BF200071B782 /* SVGMaskElement.h */,
 				B22278B20D00BF200071B782 /* SVGMaskElement.idl */,
+				0806E57912893045007CED32 /* SVGMatrix.h */,
 				B22278B30D00BF200071B782 /* SVGMatrix.idl */,
 				B22278B40D00BF200071B782 /* SVGMetadataElement.cpp */,
 				B22278B50D00BF200071B782 /* SVGMetadataElement.h */,
@@ -17137,7 +17150,6 @@
 				082FCAC3110927CE00CC4821 /* JSSVGContextCache.h */,
 				08A48A6D0E86CF6D00E225DD /* JSSVGElementInstanceCustom.cpp */,
 				08E4FE450E2BD41400F4CAE0 /* JSSVGLengthCustom.cpp */,
-				B25DFAAE0B2E2929000E6510 /* JSSVGMatrixCustom.cpp */,
 				B2C96D8C0B3AF2B7005E80EC /* JSSVGPathSegCustom.cpp */,
 				B297BC6F0B3C14CF0045A590 /* JSSVGPathSegListCustom.cpp */,
 				087D97BE10FB8D7700C00874 /* JSSVGPODListCustom.h */,
@@ -17285,9 +17297,9 @@
 		BCB16BFB0979C38700467741 /* loader */ = {
 			isa = PBXGroup;
 			children = (
-				A8D2B2521287A56000AF4DDA /* cache */,
 				1A8F6BB00DB55CDC001DB794 /* appcache */,
 				512DD8E80D91E691000F89EE /* archive */,
+				A8D2B2521287A56000AF4DDA /* cache */,
 				5126E6B60A2E3AEF005C29FA /* icon */,
 				93A1EAA20A5634D8006960A0 /* mac */,
 				E1C416160F6563180092D2FB /* CrossOriginAccessControl.cpp */,
@@ -18580,7 +18592,6 @@
 				1A569CFA0D7E2B82007C3983 /* c_instance.h in Headers */,
 				1A569CFC0D7E2B82007C3983 /* c_runtime.h in Headers */,
 				1A569CFE0D7E2B82007C3983 /* c_utility.h in Headers */,
-				BCB16C180979C3BD00467741 /* MemoryCache.h in Headers */,
 				BCB16C1A0979C3BD00467741 /* CachedCSSStyleSheet.h in Headers */,
 				BC64B4CC0CB4295D005F2B62 /* CachedFont.h in Headers */,
 				51C0AA390F2AA10A001648C2 /* CachedFrame.h in Headers */,
@@ -19629,6 +19640,7 @@
 				976D6C8F122B8A3D001FD1F7 /* FileThreadTask.h in Headers */,
 				976D6C91122B8A3D001FD1F7 /* FileWriter.h in Headers */,
 				893C47A81238908B002B3D86 /* FileWriterCallback.h in Headers */,
+				46700ED1127B96CB00F5D5D6 /* FileWriterSync.h in Headers */,
 				BC5EB69F0E81DAEB00B25965 /* FillLayer.h in Headers */,
 				845E72F80FD261EE00A87D79 /* Filter.h in Headers */,
 				08C9251A0FCC7C4A00480DEC /* FilterEffect.h in Headers */,
@@ -20456,6 +20468,7 @@
 				4E19592A0A39DACC00220FE5 /* MediaQuery.h in Headers */,
 				4E19592C0A39DACC00220FE5 /* MediaQueryEvaluator.h in Headers */,
 				4E19592E0A39DACC00220FE5 /* MediaQueryExp.h in Headers */,
+				BCB16C180979C3BD00467741 /* MemoryCache.h in Headers */,
 				9FFE3E7B11B59C5D0037874E /* MemoryInfo.h in Headers */,
 				93309DFA099E64920056E581 /* MergeIdenticalElementsCommand.h in Headers */,
 				E1ADECCE0E76AD8B004A1A5E /* MessageChannel.h in Headers */,
@@ -20747,8 +20760,8 @@
 				1CEFC9B90D78DC8C007D2579 /* SchedulePair.h in Headers */,
 				5162C7F511F77EFB00612EFE /* SchemeRegistry.h in Headers */,
 				BCEC01BE0C274DAC009F4EC9 /* Screen.h in Headers */,
-				F39BE95C12673BF400E0A674 /* ScriptArguments.h in Headers */,
 				A84D82C111D3474800972990 /* ScriptableDocumentParser.h in Headers */,
+				F39BE95C12673BF400E0A674 /* ScriptArguments.h in Headers */,
 				7AFD4A8B1131C2760035B883 /* ScriptBreakpoint.h in Headers */,
 				41F1D21F0EF35C2A00DA8753 /* ScriptCachedFrameData.h in Headers */,
 				416E75CB0EDF90C700360E1D /* ScriptCallFrame.h in Headers */,
@@ -20926,6 +20939,7 @@
 				08C859C01274575400A5728D /* SVGAnimatedRect.h in Headers */,
 				08525E631278C00100A84778 /* SVGAnimatedStaticPropertyTearOff.h in Headers */,
 				084DB59B128008CC002A6D64 /* SVGAnimatedString.h in Headers */,
+				085A15931289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h in Headers */,
 				B22279900D00BF220071B782 /* SVGAnimateElement.h in Headers */,
 				B22279930D00BF220071B782 /* SVGAnimateMotionElement.h in Headers */,
 				B22279950D00BF220071B782 /* SVGAnimateTransformElement.h in Headers */,
@@ -21011,6 +21025,7 @@
 				B2227A440D00BF220071B782 /* SVGMarkerElement.h in Headers */,
 				08735FB910E91232006D6FAD /* SVGMarkerLayoutInfo.h in Headers */,
 				B2227A470D00BF220071B782 /* SVGMaskElement.h in Headers */,
+				0806E57A12893045007CED32 /* SVGMatrix.h in Headers */,
 				B2227A4B0D00BF220071B782 /* SVGMetadataElement.h in Headers */,
 				B2A1F2B10CEF0ABF00442F6A /* SVGMissingGlyphElement.h in Headers */,
 				B2227A4E0D00BF220071B782 /* SVGMPathElement.h in Headers */,
@@ -21070,6 +21085,7 @@
 				E4AFD0100DAF335500F5F55C /* SVGSMILElement.h in Headers */,
 				0880F70E1282B46D00948505 /* SVGStaticListPropertyTearOff.h in Headers */,
 				0813A4EA1284132600992511 /* SVGStaticPropertyTearOff.h in Headers */,
+				08CA3D4412894A3800FFF260 /* SVGStaticPropertyWithParentTearOff.h in Headers */,
 				B2227AA90D00BF220071B782 /* SVGStopElement.h in Headers */,
 				B2227AAC0D00BF220071B782 /* SVGStringList.h in Headers */,
 				B2227AAF0D00BF220071B782 /* SVGStylable.h in Headers */,
@@ -21100,6 +21116,7 @@
 				B2227ADA0D00BF220071B782 /* SVGTransformable.h in Headers */,
 				B2227ADD0D00BF220071B782 /* SVGTransformDistance.h in Headers */,
 				B2227ADF0D00BF220071B782 /* SVGTransformList.h in Headers */,
+				08C7136E128956A3001B107E /* SVGTransformListPropertyTearOff.h in Headers */,
 				B2227AE20D00BF220071B782 /* SVGTRefElement.h in Headers */,
 				B2227AE50D00BF220071B782 /* SVGTSpanElement.h in Headers */,
 				B2227AE70D00BF220071B782 /* SVGUnitTypes.h in Headers */,
@@ -21344,7 +21361,7 @@
 				93F199ED08245E59001E9ABC /* XSLTProcessor.h in Headers */,
 				E1BE512E0CF6C512002EA959 /* XSLTUnicodeSort.h in Headers */,
 				97DD4D870FDF4D6E00ECF9A4 /* XSSAuditor.h in Headers */,
-				46700ED1127B96CB00F5D5D6 /* FileWriterSync.h in Headers */,
+				08250939128BD4D800E2ED8E /* SVGAnimatedTransformList.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -21404,7 +21421,6 @@
 			isa = PBXProject;
 			buildConfigurationList = 149C284308902B11008A9EFC /* Build configuration list for PBXProject "WebCore" */;
 			compatibilityVersion = "Xcode 2.4";
-			developmentRegion = English;
 			hasScannedForEncodings = 1;
 			knownRegions = (
 				English,
@@ -21733,7 +21749,6 @@
 				1A569CF90D7E2B82007C3983 /* c_instance.cpp in Sources */,
 				1A569CFB0D7E2B82007C3983 /* c_runtime.cpp in Sources */,
 				1A569CFD0D7E2B82007C3983 /* c_utility.cpp in Sources */,
-				BCB16C170979C3BD00467741 /* MemoryCache.cpp in Sources */,
 				BCB16C190979C3BD00467741 /* CachedCSSStyleSheet.cpp in Sources */,
 				BC64B4CB0CB4295D005F2B62 /* CachedFont.cpp in Sources */,
 				51C0AA410F2AA15E001648C2 /* CachedFrame.cpp in Sources */,
@@ -22268,6 +22283,7 @@
 				5160300B0CC4251200C8AC25 /* FileSystemPOSIX.cpp in Sources */,
 				976D6C8D122B8A3D001FD1F7 /* FileThread.cpp in Sources */,
 				976D6C90122B8A3D001FD1F7 /* FileWriter.cpp in Sources */,
+				46700ED0127B96CB00F5D5D6 /* FileWriterSync.cpp in Sources */,
 				BC5EB69E0E81DAEB00B25965 /* FillLayer.cpp in Sources */,
 				08C925190FCC7C4A00480DEC /* FilterEffect.cpp in Sources */,
 				A8CFF04D0A154F09000A4234 /* FixedTableLayout.cpp in Sources */,
@@ -22983,7 +22999,6 @@
 				B2FA3DA80AB75A6F000E5AC4 /* JSSVGMarkerElement.cpp in Sources */,
 				B2FA3DAA0AB75A6F000E5AC4 /* JSSVGMaskElement.cpp in Sources */,
 				B2FA3DAC0AB75A6F000E5AC4 /* JSSVGMatrix.cpp in Sources */,
-				B25DFAAF0B2E2929000E6510 /* JSSVGMatrixCustom.cpp in Sources */,
 				B2FA3DAE0AB75A6F000E5AC4 /* JSSVGMetadataElement.cpp in Sources */,
 				B27B28290CEF0C0700D39D54 /* JSSVGMissingGlyphElement.cpp in Sources */,
 				8542A7980AE5C94300DF58DF /* JSSVGNumber.cpp in Sources */,
@@ -23160,6 +23175,7 @@
 				4E1959290A39DACC00220FE5 /* MediaQuery.cpp in Sources */,
 				4E19592B0A39DACC00220FE5 /* MediaQueryEvaluator.cpp in Sources */,
 				4E19592D0A39DACC00220FE5 /* MediaQueryExp.cpp in Sources */,
+				BCB16C170979C3BD00467741 /* MemoryCache.cpp in Sources */,
 				9FFE3E7A11B59C5D0037874E /* MemoryInfo.cpp in Sources */,
 				93309DF9099E64920056E581 /* MergeIdenticalElementsCommand.cpp in Sources */,
 				E1ADECCF0E76AD8B004A1A5E /* MessageChannel.cpp in Sources */,
@@ -23384,6 +23400,7 @@
 				93E227E30AF589AD00D48324 /* ResourceLoader.cpp in Sources */,
 				51AA3F6F0BD5AA9E00892971 /* ResourceLoaderMac.mm in Sources */,
 				973E325610883B7C005BC493 /* ResourceLoadNotifier.cpp in Sources */,
+				D0CE58F8125E4CC200F3F199 /* ResourceLoadScheduler.cpp in Sources */,
 				514C767C0CE923A1007EF3CD /* ResourceRequestBase.cpp in Sources */,
 				514C76530CE9234E007EF3CD /* ResourceRequestMac.mm in Sources */,
 				514C767E0CE923A1007EF3CD /* ResourceResponseBase.cpp in Sources */,
@@ -23914,8 +23931,6 @@
 				93F19B0508245E59001E9ABC /* XSLTProcessorLibxslt.cpp in Sources */,
 				E1BE512D0CF6C512002EA959 /* XSLTUnicodeSort.cpp in Sources */,
 				97DD4D860FDF4D6E00ECF9A4 /* XSSAuditor.cpp in Sources */,
-				46700ED0127B96CB00F5D5D6 /* FileWriterSync.cpp in Sources */,
-				D0CE58F8125E4CC200F3F199 /* ResourceLoadScheduler.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
diff --git a/WebCore/bindings/js/JSBindingsAllInOne.cpp b/WebCore/bindings/js/JSBindingsAllInOne.cpp
index b786431..e46b050 100644
--- a/WebCore/bindings/js/JSBindingsAllInOne.cpp
+++ b/WebCore/bindings/js/JSBindingsAllInOne.cpp
@@ -116,7 +116,6 @@
 #include "JSSQLTransactionSyncCustom.cpp"
 #include "JSSVGElementInstanceCustom.cpp"
 #include "JSSVGLengthCustom.cpp"
-#include "JSSVGMatrixCustom.cpp"
 #include "JSSVGPathSegCustom.cpp"
 #include "JSSVGPathSegListCustom.cpp"
 #include "JSScriptProfileNodeCustom.cpp"
diff --git a/WebCore/bindings/js/JSSVGMatrixCustom.cpp b/WebCore/bindings/js/JSSVGMatrixCustom.cpp
deleted file mode 100644
index 56f735e..0000000
--- a/WebCore/bindings/js/JSSVGMatrixCustom.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008 Nikolas Zimmermann <zimmermann at kde.org>
- * Copyright (C) 2009 Jeff Schiller <codedread at gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#if ENABLE(SVG)
-#include "JSSVGMatrix.h"
-
-#include "AffineTransform.h"
-#include "SVGException.h"
-#include <runtime/Error.h>
-
-using namespace JSC;
-
-namespace WebCore {
-
-JSValue JSSVGMatrix::multiply(ExecState* exec)
-{
-    if (exec->argumentCount() < 1)
-        return throwError(exec, createSyntaxError(exec, "Not enough arguments"));
-
-    if (!exec->argument(0).inherits(&JSSVGMatrix::s_info))
-        return throwError(exec, createTypeError(exec, "secondMatrix argument was not a SVGMatrix"));
-
-    JSSVGMatrix* matrixObj = static_cast<JSSVGMatrix*>(asObject(exec->argument(0)));
-
-    AffineTransform m1(*impl());
-    AffineTransform m2(*(matrixObj->impl()));
-
-    SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this);
-    return toJS(exec, globalObject(), JSSVGStaticPODTypeWrapper<AffineTransform>::create(m1.multLeft(m2)).get(), context);
-}
-
-JSValue JSSVGMatrix::inverse(ExecState* exec)
-{
-    AffineTransform imp(*impl());
-
-    SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this);
-    JSValue result = toJS(exec, globalObject(), JSSVGStaticPODTypeWrapper<AffineTransform>::create(imp.inverse()).get(), context);
-
-    if (!imp.isInvertible())
-        setDOMException(exec, SVGException::SVG_MATRIX_NOT_INVERTABLE);
-
-    return result;
-}
-
-JSValue JSSVGMatrix::rotateFromVector(ExecState* exec)
-{
-    AffineTransform imp(*impl());
- 
-    float x = exec->argument(0).toFloat(exec);
-    float y = exec->argument(1).toFloat(exec);
-
-    SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this);
-    JSValue result = toJS(exec, globalObject(), JSSVGStaticPODTypeWrapper<AffineTransform>::create(imp.rotateFromVector(x, y)).get(), context);
-
-    if (x == 0.0 || y == 0.0)
-        setDOMException(exec, SVGException::SVG_INVALID_VALUE_ERR);
-
-    return result;
-}
-
-}
-
-#endif // ENABLE(SVG)
diff --git a/WebCore/bindings/scripts/CodeGenerator.pm b/WebCore/bindings/scripts/CodeGenerator.pm
index d439c19..1e56b0c 100644
--- a/WebCore/bindings/scripts/CodeGenerator.pm
+++ b/WebCore/bindings/scripts/CodeGenerator.pm
@@ -50,19 +50,10 @@ my %numericTypeHash = ("int" => 1, "short" => 1, "long" => 1, "long long" => 1,
 
 my %primitiveTypeHash = ( "boolean" => 1, "void" => 1, "Date" => 1);
 
-my %podTypeHash = ("SVGTransform" => 1);
-my %podTypesWithWritablePropertiesHash = ("SVGMatrix" => 1);
 my %stringTypeHash = ("DOMString" => 1, "AtomicString" => 1);
 
 my %nonPointerTypeHash = ("DOMTimeStamp" => 1, "CompareHow" => 1, "SVGPaintType" => 1);
 
-my %svgNewStyleAnimatedTypeHash = ("SVGAnimatedAngle" => 1, "SVGAnimatedBoolean" => 1,
-                                   "SVGAnimatedEnumeration" => 1, "SVGAnimatedInteger" => 1,
-                                   "SVGAnimatedLength" => 1, "SVGAnimatedLengthList" => 1,
-                                   "SVGAnimatedNumber" => 1, "SVGAnimatedNumberList" => 1,
-                                   "SVGAnimatedPreserveAspectRatio" => 1, "SVGAnimatedRect" => 1,
-                                   "SVGAnimatedString" => 1);
-
 my %svgAnimatedTypeHash = ("SVGAnimatedAngle" => 1, "SVGAnimatedBoolean" => 1,
                            "SVGAnimatedEnumeration" => 1, "SVGAnimatedInteger" => 1,
                            "SVGAnimatedLength" => 1, "SVGAnimatedLengthList" => 1,
@@ -81,17 +72,21 @@ my %svgTypeNeedingTearOff = (
     "SVGAngle" => "SVGPropertyTearOff<SVGAngle>",
     "SVGLength" => "SVGPropertyTearOff<SVGLength>",
     "SVGLengthList" => "SVGListPropertyTearOff<SVGLengthList>",
+    "SVGMatrix" => "SVGPropertyTearOff<SVGMatrix>",
     "SVGNumber" => "SVGPropertyTearOff<float>",
     "SVGNumberList" => "SVGListPropertyTearOff<SVGNumberList>",
     "SVGPoint" => "SVGPropertyTearOff<FloatPoint>",
     "SVGPointList" => "SVGListPropertyTearOff<SVGPointList>",
     "SVGPreserveAspectRatio" => "SVGPropertyTearOff<SVGPreserveAspectRatio>",
     "SVGRect" => "SVGPropertyTearOff<FloatRect>",
-    "SVGStringList" => "SVGStaticListPropertyTearOff<SVGStringList>"
+    "SVGStringList" => "SVGStaticListPropertyTearOff<SVGStringList>",
+    "SVGTransform" => "SVGPropertyTearOff<SVGTransform>",
+    "SVGTransformList" => "SVGTransformListPropertyTearOff"
 );
 
 my %svgTypeWithWritablePropertiesNeedingTearOff = (
-    "SVGPoint" => 1
+    "SVGPoint" => 1,
+    "SVGMatrix" => 1
 );
 
 # Cache of IDL file pathnames.
@@ -312,28 +307,8 @@ sub AvoidInclusionOfType
     my $object = shift;
     my $type = shift;
 
-    # Special case: SVGRect.h / SVGPoint.h / SVGNumber.h / SVGMatrix.h do not exist.
-    return 1 if $type eq "SVGRect" or $type eq "SVGPoint" or $type eq "SVGNumber" or $type eq "SVGMatrix";
-    return 0;
-}
-
-# FIXME: This method will go away once all SVG animated properties are converted to the new scheme.
-sub IsPodType
-{
-    my $object = shift;
-    my $type = shift;
-
-    return 1 if $podTypeHash{$type};
-    return 1 if $podTypesWithWritablePropertiesHash{$type};
-    return 0;
-}
-
-sub IsPodTypeWithWriteableProperties
-{
-    my $object = shift;
-    my $type = shift;
-
-    return 1 if $podTypesWithWritablePropertiesHash{$type};
+    # Special case: SVGRect.h / SVGPoint.h / SVGNumber.h do not exist.
+    return 1 if $type eq "SVGRect" or $type eq "SVGPoint" or $type eq "SVGNumber";
     return 0;
 }
 
@@ -415,22 +390,14 @@ sub GetSVGWrappedTypeNeedingTearOff
         $svgTypeNeedingTearOff =~ s/SVGListPropertyTearOff<//;
     } elsif ($svgTypeNeedingTearOff =~ /SVGStaticListPropertyTearOff/) {
         $svgTypeNeedingTearOff =~ s/SVGStaticListPropertyTearOff<//;
-    }
+    }  elsif ($svgTypeNeedingTearOff =~ /SVGTransformListPropertyTearOff/) {
+        $svgTypeNeedingTearOff =~ s/SVGTransformListPropertyTearOff<//;
+    } 
 
     $svgTypeNeedingTearOff =~ s/>//;
     return $svgTypeNeedingTearOff;
 }
 
-# FIXME: This method will go away once all SVG animated properties are converted to the new scheme.
-sub IsSVGNewStyleAnimatedType
-{
-    my $object = shift;
-    my $type = shift;
-
-    return 1 if $svgNewStyleAnimatedTypeHash{$type};
-    return 0;
-}
-
 sub IsSVGAnimatedType
 {
     my $object = shift;
diff --git a/WebCore/bindings/scripts/CodeGeneratorJS.pm b/WebCore/bindings/scripts/CodeGeneratorJS.pm
index b18e57e..07575f7 100644
--- a/WebCore/bindings/scripts/CodeGeneratorJS.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorJS.pm
@@ -325,7 +325,7 @@ sub IsSVGTypeNeedingContextParameter
 
     return 0 unless $implClassName =~ /SVG/;
     return 0 if $implClassName =~ /Element/;
-    return 0 if $codeGenerator->IsSVGNewStyleAnimatedType($implClassName);
+    return 0 if $codeGenerator->IsSVGAnimatedType($implClassName);
     return 0 if $codeGenerator->IsSVGTypeNeedingTearOff($implClassName);
 
     my @noContextNeeded = ("SVGColor", "SVGDocument", "SVGPaint", "SVGZoomEvent");
@@ -672,18 +672,9 @@ sub GenerateHeader
     my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($implType);
     $implType = $svgNativeType if $svgNativeType;
 
-    # FIXME: Old style SVG JS bindings, will vanish soon.
-    my $podType = $dataNode->extendedAttributes->{"PODType"};
-    if ($podType) {
-        $implType = "JSSVGPODTypeWrapper<$podType> ";
-        $headerIncludes{"$podType.h"} = 1 if $podType ne "float";
-        $headerIncludes{"JSSVGPODTypeWrapper.h"} = 1;
-    }
-
-    my $svgPropertyOrPodType;
-    $svgPropertyOrPodType = $podType if $podType;
-    $svgPropertyOrPodType = $svgPropertyType if $svgPropertyType;
-    $svgPropertyOrPodType = $svgListPropertyType if $svgListPropertyType;
+    my $svgPropertyOrListPropertyType;
+    $svgPropertyOrListPropertyType = $svgPropertyType if $svgPropertyType;
+    $svgPropertyOrListPropertyType = $svgListPropertyType if $svgListPropertyType;
 
     my $numConstants = @{$dataNode->constants};
     my $numAttributes = @{$dataNode->attributes};
@@ -691,11 +682,11 @@ sub GenerateHeader
 
     push(@headerContent, "\nnamespace WebCore {\n\n");
 
-    if ($codeGenerator->IsSVGNewStyleAnimatedType($implClassName)) {
+    if ($codeGenerator->IsSVGAnimatedType($implClassName)) {
         $headerIncludes{"$implClassName.h"} = 1;
     } else {
         # Implementation class forward declaration
-        AddClassForwardIfNeeded($implClassName) unless $svgPropertyOrPodType;
+        AddClassForwardIfNeeded($implClassName) unless $svgPropertyOrListPropertyType;
     }
 
     AddClassForwardIfNeeded("JSDOMWindowShell") if $interfaceName eq "DOMWindow";
@@ -944,9 +935,7 @@ sub GenerateHeader
     }
 
     if (!$hasParent || $dataNode->extendedAttributes->{"GenerateToJS"} || $dataNode->extendedAttributes->{"CustomToJS"}) {
-        if ($podType) {
-            push(@headerContent, "JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, $implType*, SVGElement*);\n");
-        } elsif ($svgPropertyType) {
+        if ($svgPropertyType) {
             push(@headerContent, "JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, $implType*);\n");
         } elsif (IsSVGTypeNeedingContextParameter($implClassName)) {
             push(@headerContent, "JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, $implType*, SVGElement* context);\n");
@@ -955,10 +944,7 @@ sub GenerateHeader
         }
     }
     if (!$hasParent || $dataNode->extendedAttributes->{"GenerateNativeConverter"}) {
-
-        if ($podType) {
-            push(@headerContent, "$podType to${interfaceName}(JSC::JSValue);\n");
-        } elsif ($interfaceName eq "NodeFilter") {
+        if ($interfaceName eq "NodeFilter") {
             push(@headerContent, "PassRefPtr<NodeFilter> toNodeFilter(JSC::JSValue);\n");
         } else {
             push(@headerContent, "$implType* to${interfaceName}(JSC::JSValue);\n");
@@ -1430,15 +1416,9 @@ sub GenerateImplementation
     my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($implType);
     $implType = $svgNativeType if $svgNativeType;
 
-    my $podType = $dataNode->extendedAttributes->{"PODType"};
-    if ($podType) {
-        $implType = "JSSVGPODTypeWrapper<$podType> ";
-    }
-
-    my $svgPropertyOrPodType;
-    $svgPropertyOrPodType = $podType if $podType;
-    $svgPropertyOrPodType = $svgPropertyType if $svgPropertyType;
-    $svgPropertyOrPodType = $svgListPropertyType if $svgListPropertyType;
+    my $svgPropertyOrListPropertyType;
+    $svgPropertyOrListPropertyType = $svgPropertyType if $svgPropertyType;
+    $svgPropertyOrListPropertyType = $svgListPropertyType if $svgListPropertyType;
 
     # Constructor
     if ($interfaceName eq "DOMWindow") {
@@ -1561,11 +1541,6 @@ sub GenerateImplementation
                 push(@implContent, "{\n");
                 push(@implContent, "    ${className}* castedThis = static_cast<$className*>(asObject(slotBase));\n");
 
-                my $implClassNameForValueConversion = "";
-                if (!$svgPropertyOrPodType and ($codeGenerator->IsSVGAnimatedType($implClassName) or $attribute->type !~ /^readonly/)) {
-                    $implClassNameForValueConversion = $implClassName;
-                }
-
                 if ($dataNode->extendedAttributes->{"CheckDomainSecurity"} && 
                         !$attribute->signature->extendedAttributes->{"DoNotCheckDomainSecurity"} &&
                         !$attribute->signature->extendedAttributes->{"DoNotCheckDomainSecurityOnGet"}) {
@@ -1578,12 +1553,12 @@ sub GenerateImplementation
                 } elsif ($attribute->signature->extendedAttributes->{"CheckNodeSecurity"}) {
                     $implIncludes{"JSDOMBinding.h"} = 1;
                     push(@implContent, "    $implClassName* imp = static_cast<$implClassName*>(castedThis->impl());\n");
-                    push(@implContent, "    return checkNodeSecurity(exec, imp->$implGetterFunctionName()) ? " . NativeToJSValue($attribute->signature, 0, $implClassName, $implClassNameForValueConversion, "imp->$implGetterFunctionName()", "castedThis") . " : jsUndefined();\n");
+                    push(@implContent, "    return checkNodeSecurity(exec, imp->$implGetterFunctionName()) ? " . NativeToJSValue($attribute->signature, 0, $implClassName, "imp->$implGetterFunctionName()", "castedThis") . " : jsUndefined();\n");
                 } elsif ($attribute->signature->extendedAttributes->{"CheckFrameSecurity"}) {
                     $implIncludes{"Document.h"} = 1;
                     $implIncludes{"JSDOMBinding.h"} = 1;
                     push(@implContent, "    $implClassName* imp = static_cast<$implClassName*>(castedThis->impl());\n");
-                    push(@implContent, "    return checkNodeSecurity(exec, imp->contentDocument()) ? " . NativeToJSValue($attribute->signature,  0, $implClassName, $implClassNameForValueConversion, "imp->$implGetterFunctionName()", "castedThis") . " : jsUndefined();\n");
+                    push(@implContent, "    return checkNodeSecurity(exec, imp->contentDocument()) ? " . NativeToJSValue($attribute->signature, 0, $implClassName, "imp->$implGetterFunctionName()", "castedThis") . " : jsUndefined();\n");
                 } elsif ($type eq "EventListener") {
                     $implIncludes{"EventListener.h"} = 1;
                     push(@implContent, "    UNUSED_PARAM(exec);\n");
@@ -1616,27 +1591,21 @@ sub GenerateImplementation
                     }
 
                     if ($svgListPropertyType) {
-                        push(@implContent, "    JSValue result =  " . NativeToJSValue($attribute->signature, 0, $implClassName, "", "castedThis->impl()->$implGetterFunctionName()", "castedThis") . ";\n");
-                    } elsif ($svgPropertyOrPodType) {
-                        push(@implContent, "    $svgPropertyOrPodType imp(*castedThis->impl());\n") if $podType;
-                        push(@implContent, "    $svgPropertyOrPodType& imp = castedThis->impl()->propertyReference();\n") if !$podType;
-                        if ($svgPropertyOrPodType eq "float") { # Special case for JSSVGNumber
-                            push(@implContent, "    JSValue result =  " . NativeToJSValue($attribute->signature, 0, $implClassName, "", "imp", "castedThis") . ";\n");
+                        push(@implContent, "    JSValue result =  " . NativeToJSValue($attribute->signature, 0, $implClassName, "castedThis->impl()->$implGetterFunctionName()", "castedThis") . ";\n");
+                    } elsif ($svgPropertyOrListPropertyType) {
+                        push(@implContent, "    $svgPropertyOrListPropertyType& imp = castedThis->impl()->propertyReference();\n");
+                        if ($svgPropertyOrListPropertyType eq "float") { # Special case for JSSVGNumber
+                            push(@implContent, "    JSValue result =  " . NativeToJSValue($attribute->signature, 0, $implClassName, "imp", "castedThis") . ";\n");
                         } else {
-                            push(@implContent, "    JSValue result =  " . NativeToJSValue($attribute->signature, 0, $implClassName, "", "imp.$implGetterFunctionName()", "castedThis") . ";\n");
+                            push(@implContent, "    JSValue result =  " . NativeToJSValue($attribute->signature, 0, $implClassName, "imp.$implGetterFunctionName()", "castedThis") . ";\n");
                         }
                     } else {
                         my $getterExpression = "imp->" . $codeGenerator->GetterExpressionPrefix(\%implIncludes, $interfaceName, $attribute) . ")";
-                        my $jsType = NativeToJSValue($attribute->signature, 0, $implClassName, $implClassNameForValueConversion, $getterExpression, "castedThis");
+                        my $jsType = NativeToJSValue($attribute->signature, 0, $implClassName, $getterExpression, "castedThis");
                         push(@implContent, "    $implClassName* imp = static_cast<$implClassName*>(castedThis->impl());\n");
                         if ($codeGenerator->IsSVGAnimatedType($type)) {
                             push(@implContent, "    RefPtr<$type> obj = $jsType;\n");
-
-                            if ($codeGenerator->IsSVGNewStyleAnimatedType($type)) {
-                                push(@implContent, "    JSValue result =  toJS(exec, castedThis->globalObject(), obj.get());\n");
-                            } else {
-                                push(@implContent, "    JSValue result =  toJS(exec, castedThis->globalObject(), obj.get(), imp);\n");
-                            }
+                            push(@implContent, "    JSValue result =  toJS(exec, castedThis->globalObject(), obj.get());\n");
                         } else {
                             push(@implContent, "    JSValue result = $jsType;\n");
                         }
@@ -1647,12 +1616,12 @@ sub GenerateImplementation
 
                 } else {
                     push(@implContent, "    ExceptionCode ec = 0;\n");                    
-                    if ($svgPropertyOrPodType) {
-                        push(@implContent, "    $svgPropertyOrPodType imp(*castedThis->impl());\n");
-                        push(@implContent, "    JSC::JSValue result = " . NativeToJSValue($attribute->signature, 0, $implClassName, "", "imp.$implGetterFunctionName(ec)", "castedThis") . ";\n");
+                    if ($svgPropertyOrListPropertyType) {
+                        push(@implContent, "    $svgPropertyOrListPropertyType imp(*castedThis->impl());\n");
+                        push(@implContent, "    JSC::JSValue result = " . NativeToJSValue($attribute->signature, 0, $implClassName, "imp.$implGetterFunctionName(ec)", "castedThis") . ";\n");
                     } else {
                         push(@implContent, "    $implClassName* imp = static_cast<$implClassName*>(castedThis->impl());\n");
-                        push(@implContent, "    JSC::JSValue result = " . NativeToJSValue($attribute->signature, 0, $implClassName, $implClassNameForValueConversion, "imp->$implGetterFunctionName(ec)", "castedThis") . ";\n");
+                        push(@implContent, "    JSC::JSValue result = " . NativeToJSValue($attribute->signature, 0, $implClassName, "imp->$implGetterFunctionName(ec)", "castedThis") . ";\n");
                     }
 
                     push(@implContent, "    setDOMException(exec, ec);\n");
@@ -1812,10 +1781,9 @@ sub GenerateImplementation
                             }
 
                             my $nativeValue = JSValueToNative($attribute->signature, "value");
-                            if ($svgPropertyOrPodType) {
-                                push(@implContent, "    $svgPropertyOrPodType podImp(*imp);\n") if $podType;
-                                push(@implContent, "    $svgPropertyOrPodType& podImp = imp->propertyReference();\n") if !$podType;
-                                if ($svgPropertyOrPodType eq "float") { # Special case for JSSVGNumber
+                            if ($svgPropertyOrListPropertyType) {
+                                push(@implContent, "    $svgPropertyOrListPropertyType& podImp = imp->propertyReference();\n");
+                                if ($svgPropertyOrListPropertyType eq "float") { # Special case for JSSVGNumber
                                     push(@implContent, "    podImp = $nativeValue;\n");
                                 } else {
                                     push(@implContent, "    podImp.set$implSetterFunctionName($nativeValue");
@@ -1823,7 +1791,6 @@ sub GenerateImplementation
                                     push(@implContent, ");\n");
                                     push(@implContent, "    setDOMException(exec, ec);\n") if @{$attribute->setterExceptions};
                                 }
-                                push(@implContent, "    imp->commitChange(podImp, castedThis);\n") if $podType;
                                 if ($svgPropertyType) {
                                     if (@{$attribute->setterExceptions}) {
                                         push(@implContent, "    if (!ec)\n"); 
@@ -1915,32 +1882,11 @@ sub GenerateImplementation
                 push(@implContent, "        return JSValue::encode(jsUndefined());\n");
             }
 
-            # Special case for JSSVGLengthList / JSSVGTransformList / JSSVGPointList / JSSVGNumberList
-            # Instead of having JSSVG*Custom.cpp implementations for the SVGList interface for all of these
-            # classes, we directly forward the calls to JSSVGPODListCustom, which centralizes the otherwise
-            # duplicated code for the JSSVG*List classes mentioned above.
-            my $svgPODListType;
-            if ($implClassName =~ /SVG.*List/ and !$svgListPropertyType) {
-                $svgPODListType = $implClassName;
-                $svgPODListType =~ s/List$//;
-                $svgPODListType = "" unless $codeGenerator->IsPodType($svgPODListType);
-                
-                # Ignore additional (non-SVGList) SVGTransformList methods, that are not handled through JSSVGPODListCustom
-                $svgPODListType = "" if $functionImplementationName =~ /createSVGTransformFromMatrix/;
-                $svgPODListType = "" if $functionImplementationName =~ /consolidate/;
-            }
-
             if ($function->signature->extendedAttributes->{"Custom"} || $function->signature->extendedAttributes->{"JSCCustom"}) {
                 push(@implContent, "    return JSValue::encode(castedThis->" . $functionImplementationName . "(exec));\n");
-            } elsif ($svgPODListType) {
-                $implIncludes{"JS${svgPODListType}.h"} = 1;
-                $implIncludes{"JSSVGPODListCustom.h"} = 1;
-                push(@implContent, "    return JSValue::encode(JSSVGPODListCustom::$functionImplementationName<$className, " . GetNativeType($svgPODListType)
-                                 . ">(castedThis, exec, to" . $svgPODListType . "));\n");
             } else {
                 push(@implContent, "    $implType* imp = static_cast<$implType*>(castedThis->impl());\n");
-                push(@implContent, "    $svgPropertyOrPodType podImp(*imp);\n") if $podType;
-                push(@implContent, "    $svgPropertyOrPodType& podImp = imp->propertyReference();\n") if !$podType and $svgPropertyType;
+                push(@implContent, "    $svgPropertyOrListPropertyType& podImp = imp->propertyReference();\n") if $svgPropertyType;
 
                 my $numParameters = @{$function->parameters};
 
@@ -1979,7 +1925,7 @@ sub GenerateImplementation
                 } else {
                     my $argsIndex = 0;
                     my $paramIndex = 0;
-                    my $functionString = (($svgPropertyOrPodType and !$svgListPropertyType) ? "podImp." : "imp->") . $functionImplementationName . "(";
+                    my $functionString = (($svgPropertyOrListPropertyType and !$svgListPropertyType) ? "podImp." : "imp->") . $functionImplementationName . "(";
                     my $hasOptionalArguments = 0;
 
                     if ($function->signature->extendedAttributes->{"CustomArgumentHandling"}) {
@@ -2024,7 +1970,7 @@ sub GenerateImplementation
                                 $hasOptionalArguments = 1;
                             }
                             push(@implContent, "    if (argsCount <= $argsIndex) {\n");
-                            GenerateImplementationFunctionCall($function, $functionString, $paramIndex, "    " x 2, $podType, $svgPropertyType, $implClassName);
+                            GenerateImplementationFunctionCall($function, $functionString, $paramIndex, "    " x 2, $svgPropertyType, $implClassName);
                             push(@implContent, "    }\n\n");
                         }
 
@@ -2122,7 +2068,7 @@ sub GenerateImplementation
                     }
 
                     push(@implContent, "\n");
-                    GenerateImplementationFunctionCall($function, $functionString, $paramIndex, "    ", $podType, $svgPropertyType, $implClassName);
+                    GenerateImplementationFunctionCall($function, $functionString, $paramIndex, "    ", $svgPropertyType, $implClassName);
                 }
             }
             push(@implContent, "}\n\n");
@@ -2192,8 +2138,6 @@ sub GenerateImplementation
         push(@implContent, "{\n");
         if ($svgPropertyType) {
             push(@implContent, "    return getDOMObjectWrapper<$className, $implType>(exec, globalObject, object);\n");
-        } elsif ($podType) {
-            push(@implContent, "    return getDOMObjectWrapper<$className, $implType>(exec, globalObject, object, context);\n");
         } elsif (IsSVGTypeNeedingContextParameter($implClassName)) {
             push(@implContent, "    return getDOMObjectWrapper<$className>(exec, globalObject, object, context);\n");
         } else {
@@ -2203,16 +2147,9 @@ sub GenerateImplementation
     }
 
     if ((!$hasParent or $dataNode->extendedAttributes->{"GenerateNativeConverter"}) and !$dataNode->extendedAttributes->{"CustomNativeConverter"}) {
-        if ($podType) {
-            push(@implContent, "$podType to${interfaceName}(JSC::JSValue value)\n");
-            push(@implContent, "{\n");
-            push(@implContent, "    return value.inherits(&${className}::s_info) ? ($podType) *static_cast<$className*>(asObject(value))->impl() : $podType()");
-        } else {
-            push(@implContent, "$implType* to${interfaceName}(JSC::JSValue value)\n");
-            push(@implContent, "{\n");
-            push(@implContent, "    return value.inherits(&${className}::s_info) ? static_cast<$className*>(asObject(value))->impl() : 0");
-        }
-
+        push(@implContent, "$implType* to${interfaceName}(JSC::JSValue value)\n");
+        push(@implContent, "{\n");
+        push(@implContent, "    return value.inherits(&${className}::s_info) ? static_cast<$className*>(asObject(value))->impl() : 0");
         push(@implContent, ";\n}\n");
     }
 
@@ -2387,7 +2324,6 @@ sub GenerateImplementationFunctionCall()
     my $functionString = shift;
     my $paramIndex = shift;
     my $indent = shift;
-    my $podType = shift;
     my $svgPropertyType = shift;
     my $implClassName = shift;
 
@@ -2406,7 +2342,6 @@ sub GenerateImplementationFunctionCall()
     if ($function->signature->type eq "void") {
         push(@implContent, $indent . "$functionString;\n");
         push(@implContent, $indent . "setDOMException(exec, ec);\n") if @{$function->raisesExceptions};
-        push(@implContent, $indent . "imp->commitChange(podImp, castedThis);\n") if $podType;
 
         if ($svgPropertyType) {
             if (@{$function->raisesExceptions}) {
@@ -2419,7 +2354,7 @@ sub GenerateImplementationFunctionCall()
 
         push(@implContent, $indent . "return JSValue::encode(jsUndefined());\n");
     } else {
-        push(@implContent, "\n" . $indent . "JSC::JSValue result = " . NativeToJSValue($function->signature, 1, $implClassName, "", $functionString, "castedThis") . ";\n");
+        push(@implContent, "\n" . $indent . "JSC::JSValue result = " . NativeToJSValue($function->signature, 1, $implClassName, $functionString, "castedThis") . ";\n");
         push(@implContent, $indent . "setDOMException(exec, ec);\n") if @{$function->raisesExceptions};
 
         $callWith = $function->signature->extendedAttributes->{"CallWith"};
@@ -2428,12 +2363,6 @@ sub GenerateImplementationFunctionCall()
             push(@implContent, $indent . "    return JSValue::encode(jsUndefined());\n");
         }
 
-        if ($podType and not $function->signature->extendedAttributes->{"Immutable"}) {
-            # Immutable methods do not commit changes back to the instance, thus producing
-            # a new instance rather than mutating existing one.
-            push(@implContent, $indent . "imp->commitChange(podImp, castedThis);\n");
-        }
-
         push(@implContent, $indent . "return JSValue::encode(result);\n");
     }
 }
@@ -2458,9 +2387,7 @@ my %nativeType = (
     "NodeFilter" => "RefPtr<NodeFilter>",
     "SerializedScriptValue" => "RefPtr<SerializedScriptValue>",
     "IDBKey" => "RefPtr<IDBKey>",
-    "SVGMatrix" => "AffineTransform",
     "SVGPaintType" => "SVGPaint::SVGPaintType",
-    "SVGTransform" => "SVGTransform",
     "boolean" => "bool",
     "double" => "double",
     "float" => "float",
@@ -2508,6 +2435,11 @@ sub GetSVGPropertyTypes
         $svgListPropertyType = $svgWrappedNativeType;
         $headerIncludes{"$svgWrappedNativeType.h"} = 1;
         $headerIncludes{"SVGAnimatedListPropertyTearOff.h"} = 1;
+    } elsif ($svgNativeType =~ /SVGTransformListPropertyTearOff/) {
+        $svgListPropertyType = $svgWrappedNativeType;
+        $headerIncludes{"$svgWrappedNativeType.h"} = 1;
+        $headerIncludes{"SVGAnimatedListPropertyTearOff.h"} = 1;
+        $headerIncludes{"SVGTransformListPropertyTearOff.h"} = 1;
     }
 
     return ($svgPropertyType, $svgListPropertyType, $svgNativeType);
@@ -2572,7 +2504,6 @@ sub NativeToJSValue
     my $signature = shift;
     my $inFunctionCall = shift;
     my $implClassName = shift;
-    my $implClassNameForValueConversion = shift;
     my $value = shift;
     my $thisValue = shift;
 
@@ -2606,35 +2537,6 @@ sub NativeToJSValue
     }
     
     my $globalObject = "$thisValue->globalObject()";
-    if ($codeGenerator->IsPodType($type)) {
-        $implIncludes{"JS$type.h"} = 1;
-
-        my $nativeType = GetNativeType($type);
-
-        my $getter = $value;
-        $getter =~ s/imp->//;
-        $getter =~ s/\(\)//;
-
-        my $setter = "set" . $codeGenerator->WK_ucfirst($getter);
-
-        # Function calls will never return 'modifyable' POD types (ie. SVGRect getBBox()) - no need to keep track changes to the returned SVGRect
-        if ($inFunctionCall eq 0
-            and not $codeGenerator->IsSVGAnimatedType($implClassName)
-            and $codeGenerator->IsPodTypeWithWriteableProperties($type)
-            and not defined $signature->extendedAttributes->{"Immutable"}) {
-            if ($codeGenerator->IsPodType($implClassName)) {
-                return "toJS(exec, $globalObject, JSSVGStaticPODTypeWrapperWithPODTypeParent<$nativeType, $implClassName>::create($value, $thisValue->impl()).get(), JSSVGContextCache::svgContextForDOMObject(castedThis))";
-            } else {
-                return "toJS(exec, $globalObject, JSSVGStaticPODTypeWrapperWithParent<$nativeType, $implClassName>::create(imp, &${implClassName}::$getter, &${implClassName}::$setter).get(), imp)";
-            }
-        }
-
-        if ($implClassNameForValueConversion eq "") {
-            return "toJS(exec, $globalObject, JSSVGStaticPODTypeWrapper<$nativeType>::create($value).get(), 0 /* no context on purpose */)";
-        } else {
-            return "toJS(exec, $globalObject, JSSVGDynamicPODTypeWrapperCache<$nativeType, $implClassNameForValueConversion>::lookupOrCreateWrapper(imp, &${implClassNameForValueConversion}::$getter, &${implClassNameForValueConversion}::$setter).get(), JSSVGContextCache::svgContextForDOMObject(castedThis));"
-        }
-    } 
 
     if ($type eq "CSSStyleDeclaration") {
         $implIncludes{"CSSMutableStyleDeclaration.h"} = 1;
@@ -2675,20 +2577,35 @@ sub NativeToJSValue
         return "toJSNewlyCreated(exec, $globalObject, WTF::getPtr($value))";
     }
 
-    if ($codeGenerator->IsSVGNewStyleAnimatedType($implClassName)) {
+    if ($codeGenerator->IsSVGAnimatedType($implClassName)) {
         # Convert from abstract SVGProperty to real type, so the right toJS() method can be invoked.
         $value = "static_cast<" . GetNativeType($type) . ">($value)";
     } elsif ($codeGenerator->IsSVGTypeNeedingTearOff($type) and not $implClassName =~ /List$/) {
         my $tearOffType = $codeGenerator->GetSVGTypeNeedingTearOff($type);
         if ($codeGenerator->IsSVGTypeWithWritablePropertiesNeedingTearOff($type) and $inFunctionCall eq 0 and not defined $signature->extendedAttributes->{"Immutable"}) {
-            $tearOffType =~ s/SVGPropertyTearOff</SVGStaticPropertyTearOff<$implClassName, /;
-            $implIncludes{"SVGStaticPropertyTearOff.h"} = 1;
-
             my $getter = $value;
+            $getter =~ s/imp\.//;
             $getter =~ s/imp->//;
             $getter =~ s/\(\)//;
-            my $updater = "update" . $codeGenerator->WK_ucfirst($getter);
-            $value = "${tearOffType}::create(imp, $value, &${implClassName}::$updater)";
+            my $updateMethod = "&${implClassName}::update" . $codeGenerator->WK_ucfirst($getter);
+
+            my $selfIsTearOffType = $codeGenerator->IsSVGTypeNeedingTearOff($implClassName);
+            if ($selfIsTearOffType) {
+                $implIncludes{"SVGStaticPropertyWithParentTearOff.h"} = 1;
+                $tearOffType =~ s/SVGPropertyTearOff</SVGStaticPropertyWithParentTearOff<$implClassName, /;
+
+                if ($value =~ /matrix/ and $implClassName eq "SVGTransform") {
+                    # SVGTransform offers a matrix() method for internal usage that returns an AffineTransform
+                    # and a svgMatrix() method returning a SVGMatrix, used for the bindings.
+                    $value =~ s/matrix/svgMatrix/;
+                }
+
+                $value = "${tearOffType}::create(castedThis->impl(), $value, $updateMethod)";
+            } else {
+                $implIncludes{"SVGStaticPropertyTearOff.h"} = 1;
+                $tearOffType =~ s/SVGPropertyTearOff</SVGStaticPropertyTearOff<$implClassName, /;
+                $value = "${tearOffType}::create(imp, $value, $updateMethod)";
+            }
         } elsif ($tearOffType =~ /SVGStaticListPropertyTearOff/) {
             my $extraImp = "GetOwnerElementForType<$implClassName, IsDerivedFromSVGElement<$implClassName>::value>::ownerElement(imp), ";
             $value = "${tearOffType}::create($extraImp$value)";
diff --git a/WebCore/bindings/scripts/CodeGeneratorObjC.pm b/WebCore/bindings/scripts/CodeGeneratorObjC.pm
index 69e24a9..50334a2 100644
--- a/WebCore/bindings/scripts/CodeGeneratorObjC.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorObjC.pm
@@ -492,7 +492,7 @@ sub GetPropertyAttributes
     # FIXME: <rdar://problem/5049934> Consider using 'nonatomic' on the DOM @property declarations.
     if ($codeGenerator->IsStringType($type) || IsNativeObjCType($type)) {
         push(@attributes, "copy");
-    } elsif ($codeGenerator->IsPodType($type) || $codeGenerator->IsSVGAnimatedType($type)) {
+    } elsif ($codeGenerator->IsSVGAnimatedType($type)) {
         push(@attributes, "retain");
     } elsif (!$codeGenerator->IsStringType($type) && !$codeGenerator->IsPrimitiveType($type) && $type ne "DOMTimeStamp" && $type ne "CompareHow" && $type ne "SVGPaintType") {
         push(@attributes, "retain");
@@ -587,25 +587,12 @@ sub AddIncludesForType
         return;
     }
 
-    if ($codeGenerator->IsSVGNewStyleAnimatedType($type)) {
-        $implIncludes{"${type}.h"} = 1;
-        $implIncludes{"DOM${type}Internal.h"} = 1;
-        return;
-    }
-
     if ($codeGenerator->IsSVGAnimatedType($type)) {
-        $implIncludes{"DeprecatedSVGAnimatedTemplate.h"} = 1;
+        $implIncludes{"${type}.h"} = 1;
         $implIncludes{"DOM${type}Internal.h"} = 1;
         return;
     }
 
-    if ($type eq "SVGMatrix") {
-        $implIncludes{"AffineTransform.h"} = 1;
-        $implIncludes{"DOMSVGMatrixInternal.h"} = 1;
-        $implIncludes{"SVGException.h"} = 1;
-        return;
-    }
-
     if ($type =~ /(\w+)(Abs|Rel)$/) {
         $implIncludes{"$1.h"} = 1;
         $implIncludes{"DOM${type}Internal.h"} = 1;
@@ -683,6 +670,9 @@ sub GetSVGPropertyTypes
     } elsif ($svgNativeType =~ /SVGListPropertyTearOff/ or $svgNativeType =~ /SVGStaticListPropertyTearOff/) {
         $svgListPropertyType = "WebCore::$svgWrappedNativeType";
         $svgListPropertyType =~ s/</\<WebCore::/;
+    } elsif ($svgNativeType =~ /SVGTransformListPropertyTearOff/) {
+        $svgListPropertyType = "WebCore::$svgWrappedNativeType";
+        $svgListPropertyType =~ s/</\<WebCore::/;
     }
 
     return ($svgPropertyType, $svgListPropertyType, $svgNativeType);
@@ -999,8 +989,6 @@ sub GenerateHeader
 
     unless ($isProtocol) {
         # Generate internal interfaces
-        my $podType = $dataNode->extendedAttributes->{"PODType"};
-        my $podTypeWithNamespace;
         my $implClassName = GetImplClassName($interfaceName);
         my $implClassNameWithNamespace = "WebCore::" . $implClassName;
 
@@ -1008,16 +996,15 @@ sub GenerateHeader
         my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($implClassName);
         $implType = $svgNativeType if $svgNativeType;
 
-        if ($podType) {
-            $podTypeWithNamespace = ($podType eq "float") ? "$podType" : "WebCore::$podType";
-        }
- 
         # Generate interface definitions. 
         @internalHeaderContent = split("\r", $implementationLicenseTemplate);
 
         push(@internalHeaderContent, "\n#import <WebCore/$className.h>\n\n");
         push(@internalHeaderContent, "#import <WebCore/SVGAnimatedPropertyTearOff.h>\n\n") if $svgPropertyType;
-        push(@internalHeaderContent, "#import <WebCore/SVGAnimatedListPropertyTearOff.h>\n\n") if $svgListPropertyType;
+        if ($svgListPropertyType) {
+            push(@internalHeaderContent, "#import <WebCore/SVGAnimatedListPropertyTearOff.h>\n\n");
+            push(@internalHeaderContent, "#import <WebCore/SVGTransformListPropertyTearOff.h>\n\n") if $svgListPropertyType =~ /SVGTransformList/;
+        }
         push(@internalHeaderContent, $interfaceAvailabilityVersionCheck) if length $interfaceAvailabilityVersion;
 
         if ($interfaceName eq "Node") {
@@ -1026,16 +1013,12 @@ sub GenerateHeader
 
         my $startedNamespace = 0;
 
-        if ($codeGenerator->IsSVGNewStyleAnimatedType($interfaceName)) {
+        if ($codeGenerator->IsSVGAnimatedType($interfaceName)) {
             push(@internalHeaderContent, "#import <WebCore/$implClassName.h>\n\n");
-        } elsif ($codeGenerator->IsSVGAnimatedType($interfaceName)) {
-            push(@internalHeaderContent, "#import <WebCore/DeprecatedSVGAnimatedTemplate.h>\n\n");
         } else {
             push(@internalHeaderContent, "namespace WebCore {\n");
             $startedNamespace = 1;
-            if ($podType and $podType ne "float") {
-                push(@internalHeaderContent, "    class $podType;\n");
-            } elsif ($interfaceName eq "Node") {
+            if ($interfaceName eq "Node") {
                 push(@internalHeaderContent, "    class EventTarget;\n    class Node;\n");
             } else {
                 push(@internalHeaderContent, "    class $implClassName;\n");
@@ -1043,13 +1026,8 @@ sub GenerateHeader
             push(@internalHeaderContent, "}\n\n");
         }
 
-        if ($podType) {
-            push(@internalHeaderContent, "$podTypeWithNamespace core($className *);\n");
-            push(@internalHeaderContent, "$className *kit($podTypeWithNamespace);\n");
-        } else {
-            push(@internalHeaderContent, "$implType* core($className *);\n");
-            push(@internalHeaderContent, "$className *kit($implType*);\n");
-        }
+        push(@internalHeaderContent, "$implType* core($className *);\n");
+        push(@internalHeaderContent, "$className *kit($implType*);\n");
 
         if ($dataNode->extendedAttributes->{Polymorphic}) {
             push(@internalHeaderContent, "Class kitClass($implType*);\n");
@@ -1084,18 +1062,11 @@ sub GenerateImplementation
 
     my $numAttributes = @{$dataNode->attributes};
     my $numFunctions = @{$dataNode->functions};
-
-    my $podType = $dataNode->extendedAttributes->{"PODType"};
-    my $podTypeWithNamespace;
     my $implType = $implClassNameWithNamespace;
 
     my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($implClassName);
     $implType = $svgNativeType if $svgNativeType;
 
-    if ($podType) {
-        $podTypeWithNamespace = ($podType eq "float") ? "$podType" : "WebCore::$podType";
-    }
-
     # - Add default header template.
     @implContentHeader = split("\r", $implementationLicenseTemplate);
 
@@ -1124,20 +1095,14 @@ sub GenerateImplementation
 
     $implIncludes{"DOMSVGPathSegInternal.h"} = 1 if $interfaceName =~ /^SVGPathSeg.+/;
 
-    if ($codeGenerator->IsSVGAnimatedType($interfaceName) and !$codeGenerator->IsSVGNewStyleAnimatedType($interfaceName)) {
-        $implIncludes{"DeprecatedSVGAnimatedTemplate.h"} = 1;
-    } elsif ($interfaceName =~ /(\w+)(Abs|Rel)$/) {
+    if ($interfaceName =~ /(\w+)(Abs|Rel)$/) {
         $implIncludes{"$1.h"} = 1;
     } else {
-        if (!$podType) {
-            if (!$codeGenerator->AvoidInclusionOfType($implClassName)) {
-                $implIncludes{"$implClassName.h"} = 1 ;
-            } elsif ($codeGenerator->IsSVGTypeNeedingTearOff($implClassName)) {
-                my $includeType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($implClassName);
-                $implIncludes{"${includeType}.h"} = 1;
-            }
-        } else {
-            $implIncludes{"$podType.h"} = 1 unless $podType eq "float";
+        if (!$codeGenerator->AvoidInclusionOfType($implClassName)) {
+            $implIncludes{"$implClassName.h"} = 1 ;
+        } elsif ($codeGenerator->IsSVGTypeNeedingTearOff($implClassName)) {
+            my $includeType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($implClassName);
+            $implIncludes{"${includeType}.h"} = 1;
         }
     } 
 
@@ -1146,9 +1111,7 @@ sub GenerateImplementation
     push(@implContent, "#import <wtf/GetPtr.h>\n\n");
 
     # add implementation accessor
-    if ($podType) {
-        push(@implContent, "#define IMPL reinterpret_cast<$podTypeWithNamespace*>(_internal)\n\n");
-    } elsif ($parentImplClassName eq "Object") {
+    if ($parentImplClassName eq "Object") {
         push(@implContent, "#define IMPL reinterpret_cast<$implType*>(_internal)\n\n");
     } else {
         my $baseClassWithNamespace = "WebCore::$baseClass";
@@ -1171,8 +1134,6 @@ sub GenerateImplementation
             push(@implContent, "        [self detach];\n");
             push(@implContent, "        IMPL->deref();\n");
             push(@implContent, "    };\n");
-        } elsif ($podType) {
-            push(@implContent, "    delete IMPL;\n");
         } else {
             push(@implContent, "    if (_internal)\n");
             push(@implContent, "        IMPL->deref();\n");
@@ -1187,8 +1148,6 @@ sub GenerateImplementation
             push(@implContent, "        [self detach];\n");
             push(@implContent, "        IMPL->deref();\n");
             push(@implContent, "    };\n");
-        } elsif ($podType) {
-            push(@implContent, "    delete IMPL;\n");
         } else {
             push(@implContent, "    if (_internal)\n");
             push(@implContent, "        IMPL->deref();\n");
@@ -1285,7 +1244,7 @@ sub GenerateImplementation
             } elsif ($attribute->signature->extendedAttributes->{"ConvertToString"}) {
                 $getterContentHead = "WTF::String::number(" . $getterContentHead;
                 $getterContentTail .= ")";
-            } elsif ($codeGenerator->IsPodType($idlType) or $idlType eq "Date") {
+            } elsif ($idlType eq "Date") {
                 $getterContentHead = "kit($getterContentHead";
                 $getterContentTail .= ")";
             } elsif ($svgPropertyType) {
@@ -1296,7 +1255,35 @@ sub GenerateImplementation
                 } else {    
                     $getterContentHead = "IMPL->propertyReference().$getterContentHead";
                 }
-            } elsif ($codeGenerator->IsSVGNewStyleAnimatedType($implClassName) and $codeGenerator->IsSVGTypeNeedingTearOff($idlType)) {
+
+                if ($codeGenerator->IsSVGTypeWithWritablePropertiesNeedingTearOff($idlType) and not defined $attribute->signature->extendedAttributes->{"Immutable"}) {
+                    my $getter = $getterContentHead;
+                    $getter =~ s/\(\)//;
+                    
+                    my $tearOffType = GetSVGTypeWithNamespace($idlType);
+                    my $selfIsTearOffType = $codeGenerator->IsSVGTypeNeedingTearOff($implClassName);
+                    if ($selfIsTearOffType) {
+                        $implIncludes{"SVGStaticPropertyWithParentTearOff.h"} = 1;
+                        $tearOffType =~ s/SVGPropertyTearOff</SVGStaticPropertyWithParentTearOff<$implClassNameWithNamespace, /;
+
+                        my $getter = $getterExpressionPrefix;
+                        $getter =~ s/IMPL->//;
+                        $getter =~ s/\(//;
+                        my $updateMethod = "&${implClassNameWithNamespace}::update" . $codeGenerator->WK_ucfirst($getter);
+
+                        if ($getterContentHead =~ /matrix/ and $implClassName eq "SVGTransform") {
+                            # SVGTransform offers a matrix() method for internal usage that returns an AffineTransform
+                            # and a svgMatrix() method returning a SVGMatrix, used for the bindings.
+                            $getterContentHead =~ s/matrix/svgMatrix/;
+                        }
+
+                        $getterContentHead = "${tearOffType}::create(IMPL, $getterContentHead$getterContentTail, $updateMethod)";
+
+                        $getterContentHead = "kit(WTF::getPtr($getterContentHead";
+                        $getterContentTail = "))";
+                    }
+                }
+            } elsif ($codeGenerator->IsSVGAnimatedType($implClassName) and $codeGenerator->IsSVGTypeNeedingTearOff($idlType)) {
                 my $idlTypeWithNamespace = GetSVGTypeWithNamespace($idlType);
                 $getterContentHead = "kit(static_cast<$idlTypeWithNamespace*>($getterContentHead)";
                 $getterContentTail .= ")";
@@ -1320,8 +1307,8 @@ sub GenerateImplementation
                         my $getter = $getterContentHead;
                         $getter =~ s/IMPL->//;
                         $getter =~ s/\(//;
-                        my $updater = "update" . $codeGenerator->WK_ucfirst($getter);
-                        $getterContentHead = "kit(WTF::getPtr(${idlTypeWithNamespace}::create(IMPL, $getterContentHead$getterContentTail, &${implClassNameWithNamespace}::$updater";
+                        my $updateMethod = "&${implClassNameWithNamespace}::update" . $codeGenerator->WK_ucfirst($getter);
+                        $getterContentHead = "kit(WTF::getPtr(${idlTypeWithNamespace}::create(IMPL, $getterContentHead$getterContentTail, $updateMethod";
                         $getterContentTail .= "))";
                     } elsif ($idlTypeWithNamespace =~ /SVGStaticListPropertyTearOff/) {
                         my $extraImp = "WebCore::GetOwnerElementForType<$implClassNameWithNamespace, WebCore::IsDerivedFromSVGElement<$implClassNameWithNamespace>::value>::ownerElement(IMPL), ";
@@ -1429,8 +1416,6 @@ sub GenerateImplementation
                 } elsif ($svgListPropertyType) {
                     $getterContentHead = "$getterExpressionPrefix";
                     push(@implContent, "    IMPL->$coreSetterName($arg);\n");
-                } elsif ($podType) {
-                    push(@implContent, "    IMPL->$coreSetterName($arg);\n");
                 } else {
                     my $setterExpressionPrefix = $codeGenerator->SetterExpressionPrefix(\%implIncludes, $interfaceName, $attribute);
                     my $ec = $hasSetterException ? ", ec" : "";
@@ -1547,12 +1532,10 @@ sub GenerateImplementation
             }
 
             # FIXME! We need [Custom] support for ObjC, to move these hacks into DOMSVGLength/MatrixCustom.mm
-            my $svgMatrixRotateFromVector = ($podType and $podType eq "AffineTransform" and $functionName eq "rotateFromVector");
-            my $svgMatrixInverse = ($podType and $podType eq "AffineTransform" and $functionName eq "inverse");
             my $svgLengthConvertToSpecifiedUnits = ($svgPropertyType and $svgPropertyType eq "WebCore::SVGLength" and $functionName eq "convertToSpecifiedUnits");
 
             push(@parameterNames, "IMPL->contextElement()") if $svgLengthConvertToSpecifiedUnits; 
-            push(@parameterNames, "ec") if $raisesExceptions and !($svgMatrixRotateFromVector || $svgMatrixInverse);
+            push(@parameterNames, "ec") if $raisesExceptions;
 
             # Handle arguments that are 'SVGProperty' based (SVGAngle/SVGLength). We need to convert from SVGPropertyTearOff<Type>* to Type,
             # to be able to call the desired WebCore function. If the conversion fails, we can't extract Type and need to raise an exception.
@@ -1561,6 +1544,10 @@ sub GenerateImplementation
                 $currentParameter++;
 
                 my $paramName = $param->name;
+
+                # make a new parameter name if the original conflicts with a property name
+                $paramName = "in" . ucfirst($paramName) if $attributeNames{$paramName};
+
                 my $idlType = $codeGenerator->StripModule($param->type);
                 next if not $codeGenerator->IsSVGTypeNeedingTearOff($idlType) or $implClassName =~ /List$/;
 
@@ -1591,21 +1578,7 @@ sub GenerateImplementation
                 $content = $caller . "->$content";
             }
 
-            if ($svgMatrixRotateFromVector) {
-                # Special case with rotateFromVector & SVGMatrix        
-                push(@functionContent, "    $exceptionInit\n");
-                push(@functionContent, "    if (x == 0.0 || y == 0.0)\n");
-                push(@functionContent, "        ec = WebCore::SVGException::SVG_INVALID_VALUE_ERR;\n");
-                push(@functionContent, "    $exceptionRaiseOnError\n");
-                push(@functionContent, "    return kit($content);\n");
-            } elsif ($svgMatrixInverse) {
-                # Special case with inverse & SVGMatrix
-                push(@functionContent, "    $exceptionInit\n");
-                push(@functionContent, "    if (!$caller->isInvertible())\n");
-                push(@functionContent, "        ec = WebCore::SVGException::SVG_MATRIX_NOT_INVERTABLE;\n");
-                push(@functionContent, "    $exceptionRaiseOnError\n");
-                push(@functionContent, "    return kit($content);\n");
-            } elsif ($returnType eq "void") {
+            if ($returnType eq "void") {
                 # Special case 'void' return type.
                 if ($raisesExceptions) {
                     push(@functionContent, "    $exceptionInit\n");
@@ -1617,7 +1590,7 @@ sub GenerateImplementation
                     push(@functionContent, "    $exceptionRaiseOnError\n");
                 } else {
                     push(@functionContent, "    $content;\n");
-                    push(@functionContent, "    IMPL->commitChange()\n") if $svgPropertyType;
+                    push(@functionContent, "    IMPL->commitChange();\n") if $svgPropertyType;
                 }
             } elsif (defined $needsCustom{"NodeToReturn"}) {
                 # Special case the insertBefore, replaceChild, removeChild 
@@ -1641,8 +1614,6 @@ sub GenerateImplementation
                     if ($codeGenerator->IsSVGTypeNeedingTearOff($function->signature->type) and not $implClassName =~ /List$/) {
                         my $idlTypeWithNamespace = GetSVGTypeWithNamespace($function->signature->type);
                         $content = "kit(WTF::getPtr(${idlTypeWithNamespace}::create($content)))";
-                    } elsif ($codeGenerator->IsPodType($function->signature->type)) {
-                        $content = "kit($content)";
                     } else {
                         $content = "kit(WTF::getPtr($content))";
                     }
@@ -1693,28 +1664,12 @@ sub GenerateImplementation
     push(@implContent, "\@end\n");
 
     # Generate internal interfaces
-    if ($podType) {
-        push(@implContent, "\n$podTypeWithNamespace core($className *wrapper)\n");
-        push(@implContent, "{\n");
-        push(@implContent, "    return wrapper ? *reinterpret_cast<$podTypeWithNamespace*>(wrapper->_internal) : $podTypeWithNamespace();\n");
-        push(@implContent, "}\n\n");
-    } else {
-        push(@implContent, "\n$implType* core($className *wrapper)\n");
-        push(@implContent, "{\n");
-        push(@implContent, "    return wrapper ? reinterpret_cast<$implType*>(wrapper->_internal) : 0;\n");
-        push(@implContent, "}\n\n");
-    }
+    push(@implContent, "\n$implType* core($className *wrapper)\n");
+    push(@implContent, "{\n");
+    push(@implContent, "    return wrapper ? reinterpret_cast<$implType*>(wrapper->_internal) : 0;\n");
+    push(@implContent, "}\n\n");
 
-    if ($podType) {
-        # FIXME: Implement caching.
-        push(@implContent, "$className *kit($podTypeWithNamespace value)\n");
-        push(@implContent, "{\n");
-        push(@implContent, "    $assertMainThread;\n");
-        push(@implContent, "    $className *wrapper = [[$className alloc] _init];\n");
-        push(@implContent, "    wrapper->_internal = reinterpret_cast<DOMObjectInternal*>(new $podTypeWithNamespace(value));\n");
-        push(@implContent, "    return [wrapper autorelease];\n");
-        push(@implContent, "}\n");
-    } elsif ($parentImplClassName eq "Object") {        
+    if ($parentImplClassName eq "Object") {        
         push(@implContent, "$className *kit($implType* value)\n");
         push(@implContent, "{\n");
         push(@implContent, "    $assertMainThread;\n");
diff --git a/WebCore/bindings/scripts/CodeGeneratorV8.pm b/WebCore/bindings/scripts/CodeGeneratorV8.pm
index 6e92ec7..25eea7f 100644
--- a/WebCore/bindings/scripts/CodeGeneratorV8.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorV8.pm
@@ -87,14 +87,6 @@ sub finish
     $object->WriteData();
 }
 
-# Workaround for V8 bindings difference where RGBColor is not a POD type.
-# FIXME: This method will go away once all SVG animated properties are converted to the new scheme.
-sub IsPodType
-{
-    my $type = shift;
-    return $codeGenerator->IsPodType($type);
-}
-
 # Params: 'domClass' struct
 sub GenerateInterface
 {
@@ -169,22 +161,6 @@ sub AddIncludesForType
     }
 }
 
-sub AddIncludesForSVGAnimatedType
-{
-    my $type = shift;
-    return if $codeGenerator->IsSVGNewStyleAnimatedType($type);
-
-    $type =~ s/SVGAnimated//;
-
-    if ($type eq "Point" or $type eq "Rect") {
-        $implIncludes{"Float$type.h"} = 1;
-    } elsif ($type eq "String") {
-        $implIncludes{"PlatformString.h"} = 1;
-    }
-
-    $implIncludes{"DeprecatedSVGAnimatedTemplate.h"} = 1;
-}
-
 # If the node has a [Conditional=XXX] attribute, returns an "ENABLE(XXX)" string for use in an #if.
 sub GenerateConditionalString
 {
@@ -226,9 +202,16 @@ sub GetSVGPropertyTypes
     } elsif ($svgNativeType =~ /SVGListPropertyTearOff/ or $svgNativeType =~ /SVGStaticListPropertyTearOff/) {
         $svgListPropertyType = $svgWrappedNativeType;
         $implIncludes{"SVGAnimatedListPropertyTearOff.h"} = 1;
+    } elsif ($svgNativeType =~ /SVGTransformListPropertyTearOff/) {
+        $svgListPropertyType = $svgWrappedNativeType;
+        $implIncludes{"SVGAnimatedListPropertyTearOff.h"} = 1;
+        $implIncludes{"SVGTransformListPropertyTearOff.h"} = 1;
+    }
+
+    if ($svgPropertyType) {
+        $svgPropertyType = "SVGPoint" if $svgPropertyType eq "FloatPoint";
     }
 
-    $svgPropertyType = "SVGPoint" if $svgPropertyType eq "FloatPoint";
     return ($svgPropertyType, $svgListPropertyType, $svgNativeType);
 }
 
@@ -249,10 +232,8 @@ sub GenerateHeader
 
     # - Add default header template
     push(@headerContent, GenerateHeaderContentHeader($dataNode));
-    my $podType = $dataNode->extendedAttributes->{"PODType"};
 
     my %headerInclues = ();
-    $headerIncludes{"$podType.h"} = 1 if $podType and ($podType ne "double" and $podType ne "float" and $podType ne "RGBA32");
     $headerIncludes{"wtf/text/StringHash.h"} = 1;
     $headerIncludes{"WrapperTypeInfo.h"} = 1;
     $headerIncludes{"V8DOMWrapper.h"} = 1;
@@ -270,7 +251,6 @@ sub GenerateHeader
     push(@headerContent, "#include <wtf/HashMap.h>\n");
     
     push(@headerContent, "\nnamespace WebCore {\n");
-    push(@headerContent, "\ntemplate<typename PODType> class V8SVGPODTypeWrapper;\n") if $podType;
     push(@headerContent, "\ntemplate<typename PropertyType> class SVGPropertyTearOff;\n") if $svgPropertyType;
     if ($svgListPropertyType) {
         if ($svgListPropertyType =~ /SVGStaticListPropertyTearOff/) {
@@ -478,7 +458,6 @@ sub GetHeaderClassInclude
         $className =~ s/Abs|Rel//;
     }
     return "" if ($codeGenerator->AvoidInclusionOfType($className));
-    return "DeprecatedSVGAnimatedTemplate.h" if $codeGenerator->IsSVGAnimatedType($className) and !$codeGenerator->IsSVGNewStyleAnimatedType($className); 
     return "${className}.h";
 }
 
@@ -704,28 +683,15 @@ sub GenerateNormalAttrGetter
     my $attrName = $attribute->signature->name;
 
     my $attrType = GetTypeFromSignature($attribute->signature);
-    my $attrIsPodType = IsPodType($attrType);
 
     my $nativeType = GetNativeTypeFromSignature($attribute->signature, -1);
-    my $isPodType = IsPodType($implClassName);
     my $skipContext = 0;
 
-    if ($isPodType) {
-        $implClassName = GetNativeType($implClassName);
-        $implIncludes{"V8SVGPODTypeWrapper.h"} = 1;
-    }
-
     # Special case: SVGZoomEvent's attributes are all read-only
     if ($implClassName eq "SVGZoomEvent") {
-        $attrIsPodType = 0;
         $skipContext = 1;
     }
 
-    # Special case for SVGColor
-    if (($implClassName eq "SVGColor") and ($attrName eq "rgbColor")) {
-        $attrIsPodType = 0;
-    }
-
     my $getterStringUsesImp = $implClassName ne "SVGNumber";
     my $svgNativeType = $codeGenerator->GetSVGTypeNeedingTearOff($implClassName);
 
@@ -739,19 +705,9 @@ static v8::Handle<v8::Value> ${attrName}AttrGetter(v8::Local<v8::String> name, c
     INC_STATS(\"DOM.$implClassName.$attrName._get\");
 END
 
-    if ($isPodType) {
-        push(@implContentDecls, <<END);
-    V8SVGPODTypeWrapper<$implClassName>* impWrapper = V8SVGPODTypeWrapper<$implClassName>::toNative(info.Holder());
-    $implClassName impInstance = *impWrapper;
-END
-        if ($getterStringUsesImp) {
-            push(@implContentDecls, <<END);
-    $implClassName* imp = &impInstance;
-END
-        }
-    } elsif ($svgNativeType) {
+    if ($svgNativeType) {
         my $svgWrappedNativeType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($implClassName);
-        if ($svgWrappedNativeType =~ /List$/) {
+        if ($svgWrappedNativeType =~ /List/) {
             push(@implContentDecls, <<END);
     $svgNativeType* imp = V8${implClassName}::toNative(info.Holder());
 END
@@ -808,7 +764,7 @@ END
         push(@implContentDecls, "    if (!V8BindingSecurity::checkNodeSecurity(V8BindingState::Only(), imp->contentDocument()))\n    return v8::Handle<v8::Value>();\n\n");
     }
 
-    my $useExceptions = 1 if @{$attribute->getterExceptions} and !($isPodType);
+    my $useExceptions = 1 if @{$attribute->getterExceptions};
     if ($useExceptions) {
         $implIncludes{"ExceptionCode.h"} = 1;
         push(@implContentDecls, "    ExceptionCode ec = 0;\n");
@@ -832,97 +788,61 @@ END
     my $result;
     my $wrapper;
 
-    if ($attrIsPodType) {
-        $implIncludes{"V8SVGPODTypeWrapper.h"} = 1;
-
-        my $getter = $getterString;
-        $getter =~ s/imp->//;
-        $getter =~ s/\(\)//;
-        my $setter = "set" . $codeGenerator->WK_ucfirst($getter);
-
-        my $implClassIsAnimatedType = $codeGenerator->IsSVGAnimatedType($implClassName);
-        if (not $implClassIsAnimatedType and $codeGenerator->IsPodTypeWithWriteableProperties($attrType) and not defined $attribute->signature->extendedAttributes->{"Immutable"}) {
-            if (IsPodType($implClassName)) {
-                my $wrapper = "V8SVGStaticPODTypeWrapperWithPODTypeParent<$nativeType, $implClassName>::create($getterString, impWrapper)";
-                push(@implContentDecls, "    RefPtr<V8SVGStaticPODTypeWrapperWithPODTypeParent<$nativeType, $implClassName> > wrapper = $wrapper;\n");
-            } else {
-                my $wrapper = "V8SVGStaticPODTypeWrapperWithParent<$nativeType, $implClassName>::create(imp, &${implClassName}::$getter, &${implClassName}::$setter)";
-                push(@implContentDecls, "    RefPtr<V8SVGStaticPODTypeWrapperWithParent<$nativeType, $implClassName> > wrapper = $wrapper;\n");
-            }
-        } else {
-            if ($implClassIsAnimatedType) {
-                # We can't hash member function pointers, so instead generate
-                # some hashing material based on the names of the methods.
-                my $hashhex = substr(Digest::MD5::md5_hex("${implClassName}::$getter ${implClassName}::$setter)"), 0, 8);
-                my $wrapper = "V8SVGDynamicPODTypeWrapperCache<$nativeType, $implClassName>::lookupOrCreateWrapper(imp, &${implClassName}::$getter, &${implClassName}::$setter, 0x$hashhex)";
-                push(@implContentDecls, "    RefPtr<V8SVGPODTypeWrapper<" . $nativeType . "> > wrapper = $wrapper;\n");
-            } else {
-                my $wrapper = GenerateSVGStaticPodTypeWrapper($returnType, $getterString);
-                push(@implContentDecls, "    RefPtr<V8SVGStaticPODTypeWrapper<" . $nativeType . "> > wrapper = $wrapper;\n");
-            }
-        }
-
-    } else {
         if ($attribute->signature->type eq "EventListener" && $dataNode->name eq "DOMWindow") {
-            push(@implContentDecls, "    if (!imp->document())\n");
-            push(@implContentDecls, "        return v8::Handle<v8::Value>();\n");
-        }
+        push(@implContentDecls, "    if (!imp->document())\n");
+        push(@implContentDecls, "        return v8::Handle<v8::Value>();\n");
+    }
 
-        if ($useExceptions) {
-            if ($nativeType =~ /^V8Parameter/) {
-              push(@implContentDecls, "    " . ConvertToV8Parameter($attribute->signature, $nativeType, "v", $getterString) . ";\n");
-            } else {
-              push(@implContentDecls, "    $nativeType v = $getterString;\n");
-            }
-            push(@implContentDecls, GenerateSetDOMException("    "));
-            $result = "v";
-            $result .= ".release()" if (IsRefPtrType($returnType));
+    if ($useExceptions) {
+        if ($nativeType =~ /^V8Parameter/) {
+          push(@implContentDecls, "    " . ConvertToV8Parameter($attribute->signature, $nativeType, "v", $getterString) . ";\n");
         } else {
-            # Can inline the function call into the return statement to avoid overhead of using a Ref<> temporary
-            $result = $getterString;
+          push(@implContentDecls, "    $nativeType v = $getterString;\n");
         }
+        push(@implContentDecls, GenerateSetDOMException("    "));
+        $result = "v";
+        $result .= ".release()" if (IsRefPtrType($returnType));
+    } else {
+        # Can inline the function call into the return statement to avoid overhead of using a Ref<> temporary
+        $result = $getterString;
+    }
  
-        # Special case for readonly or Replaceable attributes (with a few exceptions). This attempts to ensure that JS wrappers don't get
-        # garbage-collected prematurely when their lifetime is strongly tied to their owner. We accomplish this by inserting a reference to
-        # the newly created wrapper into an internal field of the holder object.
-        if (!IsNodeSubType($dataNode) && $attrName ne "self" && (IsWrapperType($returnType) && ($attribute->type =~ /^readonly/ || $attribute->signature->extendedAttributes->{"Replaceable"})
-            && $returnType ne "EventTarget" && $returnType ne "SerializedScriptValue" && $returnType ne "DOMWindow" 
-            && $returnType !~ /SVG/ && $returnType !~ /HTML/ && !IsDOMNodeType($returnType))) {
-            AddIncludesForType($returnType);
-            my $domMapFunction = GetDomMapFunction(0, $returnType);
-            # Check for a wrapper in the wrapper cache. If there is one, we know that a hidden reference has already
-            # been created. If we don't find a wrapper, we create both a wrapper and a hidden reference.
-            push(@implContentDecls, "    RefPtr<$returnType> result = ${getterString};\n");
-            push(@implContentDecls, "    v8::Handle<v8::Value> wrapper = result.get() ? ${domMapFunction}.get(result.get()) : v8::Handle<v8::Value>();\n");
-            push(@implContentDecls, "    if (wrapper.IsEmpty()) {\n");
-            push(@implContentDecls, "        wrapper = toV8(result.get());\n");
-            push(@implContentDecls, "        if (!wrapper.IsEmpty())\n");
-            if ($dataNode->name eq "DOMWindow") {
-                push(@implContentDecls, "            V8DOMWrapper::setHiddenWindowReference(imp->frame(), wrapper);\n");
-            } else {
-                push(@implContentDecls, "            V8DOMWrapper::setHiddenReference(info.Holder(), wrapper);\n");
-            }
-            push(@implContentDecls, "    }\n");
-            push(@implContentDecls, "    return wrapper;\n");
-            push(@implContentDecls, "}\n\n");
-            push(@implContentDecls, "#endif // ${conditionalString}\n\n") if $conditionalString;
-            return;
+    # Special case for readonly or Replaceable attributes (with a few exceptions). This attempts to ensure that JS wrappers don't get
+    # garbage-collected prematurely when their lifetime is strongly tied to their owner. We accomplish this by inserting a reference to
+    # the newly created wrapper into an internal field of the holder object.
+    if (!IsNodeSubType($dataNode) && $attrName ne "self" && (IsWrapperType($returnType) && ($attribute->type =~ /^readonly/ || $attribute->signature->extendedAttributes->{"Replaceable"})
+        && $returnType ne "EventTarget" && $returnType ne "SerializedScriptValue" && $returnType ne "DOMWindow" 
+        && $returnType !~ /SVG/ && $returnType !~ /HTML/ && !IsDOMNodeType($returnType))) {
+        AddIncludesForType($returnType);
+        my $domMapFunction = GetDomMapFunction(0, $returnType);
+        # Check for a wrapper in the wrapper cache. If there is one, we know that a hidden reference has already
+        # been created. If we don't find a wrapper, we create both a wrapper and a hidden reference.
+        push(@implContentDecls, "    RefPtr<$returnType> result = ${getterString};\n");
+        push(@implContentDecls, "    v8::Handle<v8::Value> wrapper = result.get() ? ${domMapFunction}.get(result.get()) : v8::Handle<v8::Value>();\n");
+        push(@implContentDecls, "    if (wrapper.IsEmpty()) {\n");
+        push(@implContentDecls, "        wrapper = toV8(result.get());\n");
+        push(@implContentDecls, "        if (!wrapper.IsEmpty())\n");
+        if ($dataNode->name eq "DOMWindow") {
+            push(@implContentDecls, "            V8DOMWrapper::setHiddenWindowReference(imp->frame(), wrapper);\n");
+        } else {
+            push(@implContentDecls, "            V8DOMWrapper::setHiddenReference(info.Holder(), wrapper);\n");
         }
+        push(@implContentDecls, "    }\n");
+        push(@implContentDecls, "    return wrapper;\n");
+        push(@implContentDecls, "}\n\n");
+        push(@implContentDecls, "#endif // ${conditionalString}\n\n") if $conditionalString;
+        return;
     }
 
     if (IsSVGTypeNeedingContextParameter($attrType) && !$skipContext) {
-        if ($attrIsPodType) {
-            push(@implContentDecls, GenerateSVGContextAssignment($implClassName, "wrapper.get()", "    "));
-        } else {
-            push(@implContentDecls, GenerateSVGContextRetrieval($implClassName, "    "));
-            # The templating associated with passing withSVGContext()'s return value directly into toV8 can get compilers confused,
-            # so just manually set the return value to a PassRefPtr of the expected type.
-            push(@implContentDecls, "    PassRefPtr<$attrType> resultAsPassRefPtr = V8Proxy::withSVGContext($result, context);\n");
-            $result = "resultAsPassRefPtr";
-        }
+        push(@implContentDecls, GenerateSVGContextRetrieval($implClassName, "    "));
+        # The templating associated with passing withSVGContext()'s return value directly into toV8 can get compilers confused,
+        # so just manually set the return value to a PassRefPtr of the expected type.
+        push(@implContentDecls, "    PassRefPtr<$attrType> resultAsPassRefPtr = V8Proxy::withSVGContext($result, context);\n");
+        $result = "resultAsPassRefPtr";
     }
 
-    if ($codeGenerator->IsSVGNewStyleAnimatedType($implClassName) and $codeGenerator->IsSVGTypeNeedingTearOff($attrType)) {
+    if ($codeGenerator->IsSVGAnimatedType($implClassName) and $codeGenerator->IsSVGTypeNeedingTearOff($attrType)) {
         $implIncludes{"V8$attrType.h"} = 1;
         my $svgNativeType = $codeGenerator->GetSVGTypeNeedingTearOff($attrType);
         # Convert from abstract SVGProperty to real type, so the right toJS() method can be invoked.
@@ -932,14 +852,30 @@ END
         $implIncludes{"SVGPropertyTearOff.h"} = 1;
         my $tearOffType = $codeGenerator->GetSVGTypeNeedingTearOff($attrType);
         if ($codeGenerator->IsSVGTypeWithWritablePropertiesNeedingTearOff($attrType) and not defined $attribute->signature->extendedAttributes->{"Immutable"}) {
-            $tearOffType =~ s/SVGPropertyTearOff</SVGStaticPropertyTearOff<$implClassName, /;
-            $implIncludes{"SVGStaticPropertyTearOff.h"} = 1;
-
             my $getter = $result;
             $getter =~ s/imp->//;
             $getter =~ s/\(\)//;
-            my $updater = "update" . $codeGenerator->WK_ucfirst($getter);
-            push(@implContentDecls, "    return toV8(WTF::getPtr(${tearOffType}::create(imp, $result, &${implClassName}::$updater)));\n");
+
+            my $updateMethod = "&${implClassName}::update" . $codeGenerator->WK_ucfirst($getter);
+
+            my $selfIsTearOffType = $codeGenerator->IsSVGTypeNeedingTearOff($implClassName);
+            if ($selfIsTearOffType) {
+                $implIncludes{"SVGStaticPropertyWithParentTearOff.h"} = 1;
+                $tearOffType =~ s/SVGPropertyTearOff</SVGStaticPropertyWithParentTearOff<$implClassName, /;
+
+                if ($result =~ /matrix/ and $implClassName eq "SVGTransform") {
+                    # SVGTransform offers a matrix() method for internal usage that returns an AffineTransform
+                    # and a svgMatrix() method returning a SVGMatrix, used for the bindings.
+                    $result =~ s/matrix/svgMatrix/;
+                }
+
+                push(@implContentDecls, "    return toV8(WTF::getPtr(${tearOffType}::create(wrapper, $result, $updateMethod)));\n");
+            } else {
+                $implIncludes{"SVGStaticPropertyTearOff.h"} = 1;
+                $tearOffType =~ s/SVGPropertyTearOff</SVGStaticPropertyTearOff<$implClassName, /;
+
+                push(@implContentDecls, "    return toV8(WTF::getPtr(${tearOffType}::create(imp, $result, $updateMethod)));\n");
+            }
         } elsif ($tearOffType =~ /SVGStaticListPropertyTearOff/) {
             my $extraImp = "GetOwnerElementForType<$implClassName, IsDerivedFromSVGElement<$implClassName>::value>::ownerElement(imp), ";
             push(@implContentDecls, "    return toV8(WTF::getPtr(${tearOffType}::create($extraImp$result)));\n");
@@ -948,9 +884,6 @@ END
         } else {
             push(@implContentDecls, "    return toV8(WTF::getPtr(${tearOffType}::create($result)));\n");
         }
-    } elsif ($attrIsPodType) {
-        $implIncludes{"V8${attrType}.h"} = 1;
-        push(@implContentDecls, "    return toV8(wrapper.release().get());\n");
     } else {
         push(@implContentDecls, "    " . ReturnNativeToJSValue($attribute->signature, $result, "    ").";\n");
     }
@@ -1003,16 +936,8 @@ sub GenerateNormalAttrSetter
         }
     }
 
-    my $isPodType = IsPodType($implClassName);
     my $svgNativeType = $codeGenerator->GetSVGTypeNeedingTearOff($implClassName);
-
-    if ($isPodType) {
-        $implClassName = GetNativeType($implClassName);
-        $implIncludes{"V8SVGPODTypeWrapper.h"} = 1;
-        push(@implContentDecls, "    V8SVGPODTypeWrapper<$implClassName>* wrapper = V8SVGPODTypeWrapper<$implClassName>::toNative(info.Holder());\n");
-        push(@implContentDecls, "    $implClassName impInstance = *wrapper;\n");
-        push(@implContentDecls, "    $implClassName* imp = &impInstance;\n");
-    } elsif ($svgNativeType) {
+    if ($svgNativeType) {
         my $svgWrappedNativeType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($implClassName);
         if ($svgWrappedNativeType =~ /List$/) {
             push(@implContentDecls, <<END);
@@ -1082,7 +1007,7 @@ END
         $result = "WTF::getPtr(" . $result . ")";
     }
 
-    my $useExceptions = 1 if @{$attribute->setterExceptions} and !($isPodType);
+    my $useExceptions = 1 if @{$attribute->setterExceptions};
 
     if ($useExceptions) {
         $implIncludes{"ExceptionCode.h"} = 1;
@@ -1116,9 +1041,7 @@ END
         push(@implContentDecls, "        V8Proxy::setDOMException(ec);\n");
     }
 
-    if ($isPodType) {
-        push(@implContentDecls, "    wrapper->commitChange(*imp, V8Proxy::svgContext(wrapper));\n");
-    } elsif ($svgNativeType) {
+    if ($svgNativeType) {
         if ($useExceptions) {
             push(@implContentDecls, "    if (!ec)\n");
             push(@implContentDecls, "        wrapper->commitChange();\n");
@@ -1127,16 +1050,10 @@ END
         }
     } elsif (IsSVGTypeNeedingContextParameter($implClassName)) {
         $implIncludes{"SVGElement.h"} = 1;
-
-        my $currentObject = "imp";
-        if ($isPodType) {
-            $currentObject = "wrapper";
-        }
-
-        push(@implContentDecls, "    if (SVGElement* context = V8Proxy::svgContext($currentObject))\n");
+        push(@implContentDecls, "    if (SVGElement* context = V8Proxy::svgContext(imp))\n");
         push(@implContentDecls, "        context->svgAttributeChanged(imp->associatedAttributeName());\n");
     }
-    
+
     push(@implContentDecls, "    return;\n");
     push(@implContentDecls, "}\n\n");  # end of setter
     push(@implContentDecls, "#endif // ${conditionalString}\n\n") if $conditionalString;
@@ -1327,18 +1244,13 @@ END
 
     my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($implClassName);
 
-    if (IsPodType($implClassName)) {
-        my $nativeClassName = GetNativeType($implClassName);
-        push(@implContentDecls, "    V8SVGPODTypeWrapper<$nativeClassName>* impWrapper = V8SVGPODTypeWrapper<$nativeClassName>::toNative(args.Holder());\n");
-        push(@implContentDecls, "    $nativeClassName impInstance = *impWrapper;\n");
-        push(@implContentDecls, "    $nativeClassName* imp = &impInstance;\n");
-    } elsif ($svgNativeType) {
+    if ($svgNativeType) {
         my $nativeClassName = GetNativeType($implClassName); 
         if ($implClassName =~ /List$/) {
-            push(@implContentDecls, "    $nativeClassName imp = V8${svgListPropertyType}::toNative(args.Holder());\n");
+            push(@implContentDecls, "    $nativeClassName imp = V8${implClassName}::toNative(args.Holder());\n");
         } else {
             my $svgWrappedNativeType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($implClassName);
-            push(@implContentDecls, "    $nativeClassName wrapper = V8${svgPropertyType}::toNative(args.Holder());\n");
+            push(@implContentDecls, "    $nativeClassName wrapper = V8${implClassName}::toNative(args.Holder());\n");
             push(@implContentDecls, "    $svgWrappedNativeType& impInstance = wrapper->propertyReference();\n");
             push(@implContentDecls, "    $svgWrappedNativeType* imp = &impInstance;\n");
         }
@@ -1412,10 +1324,6 @@ END
             push(@implContentDecls, "    }\n");
         }
 
-        if (BasicTypeCanFailConversion($parameter)) {
-            push(@implContentDecls, "    bool ${parameterName}Ok;\n");
-        }
-
         $implIncludes{"ExceptionCode.h"} = 1;
         my $nativeType = GetNativeTypeFromSignature($parameter, $paramIndex);
         if ($parameter->extendedAttributes->{"Callback"}) {
@@ -1441,13 +1349,13 @@ END
             push(@implContentDecls, "        return v8::Undefined();\n");
         } elsif (TypeCanFailConversion($parameter)) {
             push(@implContentDecls, "    $nativeType $parameterName = " .
-                 JSValueToNative($parameter, "args[$paramIndex]", BasicTypeCanFailConversion($parameter) ?  "${parameterName}Ok" : undef) . ";\n");
-            push(@implContentDecls, "    if (UNLIKELY(!$parameterName" . (BasicTypeCanFailConversion($parameter) ? "Ok" : "") . ")) {\n");
+                 JSValueToNative($parameter, "args[$paramIndex]") . ";\n");
+            push(@implContentDecls, "    if (UNLIKELY(!$parameterName)) {\n");
             push(@implContentDecls, "        ec = TYPE_MISMATCH_ERR;\n");
             push(@implContentDecls, "        goto fail;\n");
             push(@implContentDecls, "    }\n");
         } elsif ($nativeType =~ /^V8Parameter/) {
-            my $value = JSValueToNative($parameter, "args[$paramIndex]", BasicTypeCanFailConversion($parameter) ?  "${parameterName}Ok" : undef);
+            my $value = JSValueToNative($parameter, "args[$paramIndex]");
             push(@implContentDecls, "    " . ConvertToV8Parameter($parameter, $nativeType, $parameterName, $value) . "\n");
         } else {
             $implIncludes{"V8BindingMacros.h"} = 1;
@@ -1474,7 +1382,7 @@ END
                 }
             }
             push(@implContentDecls, "    EXCEPTION_BLOCK($nativeType, $parameterName, " .
-                 JSValueToNative($parameter, "args[$paramIndex]", BasicTypeCanFailConversion($parameter) ?  "${parameterName}Ok" : undef) . ");\n");
+                 JSValueToNative($parameter, "args[$paramIndex]") . ");\n");
         }
 
         if ($parameter->extendedAttributes->{"IsIndex"}) {
@@ -1814,7 +1722,6 @@ sub GenerateImplementation
     my $visibleInterfaceName = GetVisibleInterfaceName($interfaceName);
     my $className = "V8$interfaceName";
     my $implClassName = $interfaceName;
-
     my $hasLegacyParent = $dataNode->extendedAttributes->{"LegacyParent"};
 
     # - Add default header template
@@ -1827,10 +1734,6 @@ sub GenerateImplementation
     $implIncludes{"V8DOMWrapper.h"} = 1;
     $implIncludes{"V8IsolatedContext.h"} = 1;
 
-    if ($className =~ /^V8SVGAnimated/) {
-        AddIncludesForSVGAnimatedType($interfaceName);
-    }
-
     AddIncludesForType($interfaceName);
 
     my $toActive = IsActiveDomType($interfaceName) ? "${className}::toActiveDOMObject" : "0";
@@ -2668,7 +2571,7 @@ sub GetDomMapFunction
     return "getDOMSVGElementInstanceMap()" if $type eq "SVGElementInstance";
     return "getDOMNodeMap()" if ($dataNode && IsNodeSubType($dataNode));
     # Only use getDOMSVGObjectWithContextMap() for non-node svg objects
-    return "getDOMSVGObjectWithContextMap()" if $type =~ /SVG/ and $type ne "SVGLength" and $type ne "SVGLengthList" and not $codeGenerator->IsSVGNewStyleAnimatedType($type);
+    return "getDOMSVGObjectWithContextMap()" if $type =~ /SVG/ and not $codeGenerator->IsSVGTypeNeedingTearOff($type) and not $codeGenerator->IsSVGAnimatedType($type);
     return "" if $type eq "DOMImplementation";
     return "getActiveDOMObjectMap()" if IsActiveDomType($type);
     return "getDOMObjectMap()";
@@ -2696,8 +2599,6 @@ sub GetNativeTypeForConversions
     my $dataNode = shift;
     my $type = shift;
 
-    $type = "AffineTransform" if $type eq "SVGMatrix";
-    $type = "V8SVGPODTypeWrapper<$type>" if $dataNode->extendedAttributes->{"PODType"};
     $type = $codeGenerator->GetSVGTypeNeedingTearOff($type) if $codeGenerator->IsSVGTypeNeedingTearOff($type); 
     return $type;
 }
@@ -2710,22 +2611,13 @@ sub GenerateFunctionCallString()
     my $implClassName = shift;
 
     my $name = $function->signature->name;
-    my $isPodType = IsPodType($implClassName);
     my $returnType = GetTypeFromSignature($function->signature);
-    my $returnsPodType = IsPodType($returnType);
     my $nativeReturnType = GetNativeType($returnType, 0);
     my $result = "";
 
     my $isSVGTearOffType = ($codeGenerator->IsSVGTypeNeedingTearOff($returnType) and not $implClassName =~ /List$/);
     $nativeReturnType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($returnType) if $isSVGTearOffType;
 
-    # Special case: SVG matrix transform methods should not mutate
-    # the matrix but return a copy
-    my $copyFirst = 0;
-    if ($implClassName eq "SVGMatrix" && $function->signature->type eq "SVGMatrix") {
-        $copyFirst = 1;
-    }
-
     if ($function->signature->extendedAttributes->{"v8implname"}) {
         $name = $function->signature->extendedAttributes->{"v8implname"};
     }
@@ -2735,23 +2627,10 @@ sub GenerateFunctionCallString()
     }
 
     my $functionString = "imp->${name}(";
-
-    if ($copyFirst) {
-        $functionString = "result.${name}(";
-    }
-
     if ($function->signature->extendedAttributes->{"ClassMethod"}) {
         $functionString = "${implClassName}::${name}(";
     }
 
-    my $returnsListItemPodType = 0;
-    # SVG lists functions that return POD types require special handling
-    if (IsSVGListTypeNeedingSpecialHandling($implClassName) && IsSVGListMethod($name) && $returnsPodType) {
-        $returnsListItemPodType = 1;
-        $result .= $indent . "SVGList<RefPtr<SVGPODListItem<$nativeReturnType> > >* listImp = imp;\n";
-        $functionString = "listImp->${name}(";
-    }
-
     my $index = 0;
     my $hasScriptState = 0;
 
@@ -2787,12 +2666,6 @@ sub GenerateFunctionCallString()
         my $paramName = $parameter->name;
         my $paramType = $parameter->type;
 
-        # This is a bit of a hack... we need to convert parameters to methods on SVG lists
-        # of POD types which are items in the list to appropriate SVGList<> instances
-        if ($returnsListItemPodType && $paramType . "List" eq $implClassName) {
-            $paramName = "SVGPODListItem<" . GetNativeType($paramType, 1) . ">::copy($paramName)";
-        }
-
         if ($parameter->type eq "NodeFilter" || $parameter->type eq "XPathNSResolver") {
             $functionString .= "$paramName.get()";
         } elsif ($codeGenerator->IsSVGTypeNeedingTearOff($parameter->type) and not $implClassName =~ /List$/) {
@@ -2801,6 +2674,8 @@ sub GenerateFunctionCallString()
             $result .= $indent . "    V8Proxy::setDOMException(WebCore::TYPE_MISMATCH_ERR);\n";
             $result .= $indent . "    return v8::Handle<v8::Value>();\n";
             $result .= $indent . "}\n";
+        } elsif ($parameter->type eq "SVGMatrix" and $implClassName eq "SVGTransformList") {
+            $functionString .= "$paramName.get()";
         } else {
             $functionString .= $paramName;
         }
@@ -2833,16 +2708,16 @@ sub GenerateFunctionCallString()
 
     if ($returnType eq "void") {
         $result .= $indent . "$functionString;\n";
-    } elsif ($copyFirst) {
-        $result .= $indent . GetNativeType($returnType, 0) . " result = *imp;\n" . $indent . "$functionString;\n";
-    } elsif ($returnsListItemPodType) {
-        $result .= $indent . "RefPtr<SVGPODListItem<$nativeReturnType> > result = $functionString;\n";
-    } elsif ($hasScriptState or @{$function->raisesExceptions} or $returnsPodType or $isPodType or IsSVGTypeNeedingContextParameter($returnType)) {
+    } elsif ($hasScriptState or @{$function->raisesExceptions}) {
         $result .= $indent . $nativeReturnType . " result = $functionString;\n";
     } else {
         # Can inline the function call into the return statement to avoid overhead of using a Ref<> temporary
         $return = $functionString;
         $returnIsRef = 0;
+    
+        if ($implClassName eq "SVGTransformList" and IsRefPtrType($returnType)) {
+            $return = "WTF::getPtr(" . $return . ")";
+        }
     }
 
     if (@{$function->raisesExceptions}) {
@@ -2855,17 +2730,6 @@ sub GenerateFunctionCallString()
         $result .= $indent . "    return throwError(state.exception());\n"
     }
 
-    # If the return type is a POD type, separate out the wrapper generation
-    if ($returnsListItemPodType) {
-        $result .= $indent . "RefPtr<V8SVGPODTypeWrapper<" . $nativeReturnType . "> > wrapper = ";
-        $result .= "V8SVGPODTypeWrapperCreatorForList<" . $nativeReturnType . ">::create($return, imp->associatedAttributeName());\n";
-        $return = "wrapper";
-    } elsif ($returnsPodType) {
-        $result .= $indent . "RefPtr<V8SVGPODTypeWrapper<" . $nativeReturnType . "> > wrapper = ";
-        $result .= GenerateSVGStaticPodTypeWrapper($returnType, $return) . ";\n";
-        $return = "wrapper";
-    }
-
     if ($isSVGTearOffType) {
         $implIncludes{"V8$returnType.h"} = 1;
         $implIncludes{"SVGPropertyTearOff.h"} = 1;
@@ -2892,24 +2756,12 @@ sub GenerateFunctionCallString()
     }
 
     # If the implementing class is a POD type, commit changes
-    if ($isPodType) {
-        if (!$generatedSVGContextRetrieval) {
-            $result .= GenerateSVGContextRetrieval($implClassName, $indent);
-            $generatedSVGContextRetrieval = 1;
-        }
-
-        $result .= $indent . "impWrapper->commitChange(impInstance, context);\n";
-    } elsif ($codeGenerator->IsSVGTypeNeedingTearOff($implClassName) and not $implClassName =~ /List$/) {
+    if ($codeGenerator->IsSVGTypeNeedingTearOff($implClassName) and not $implClassName =~ /List$/) {
         $result .= $indent . "wrapper->commitChange();\n";
     }
 
-    if ($returnsPodType) {
-        $implIncludes{"V8${returnType}.h"} = 1;
-        $result .= $indent . "return toV8(wrapper.release());\n";
-    } else {
-        $return .= ".release()" if ($returnIsRef);
-        $result .= $indent . ReturnNativeToJSValue($function->signature, $return, $indent) . ";\n";
-    }
+    $return .= ".release()" if ($returnIsRef);
+    $result .= $indent . ReturnNativeToJSValue($function->signature, $return, $indent) . ";\n";
 
     return $result;
 }
@@ -2997,8 +2849,6 @@ sub GetNativeType
     return "bool" if $type eq "boolean";
     return "String" if $type eq "DOMString";
     return "Range::CompareHow" if $type eq "CompareHow";
-    return "AffineTransform" if $type eq "SVGMatrix";
-    return "SVGTransform" if $type eq "SVGTransform";
     return "SVGPaint::SVGPaintType" if $type eq "SVGPaintType";
     return "DOMTimeStamp" if $type eq "DOMTimeStamp";
     return "unsigned" if $type eq "unsigned int";
@@ -3043,16 +2893,6 @@ sub TranslateParameter
     }
 }
 
-sub BasicTypeCanFailConversion
-{
-    my $signature = shift;
-    my $type = GetTypeFromSignature($signature);
-
-    return 1 if $type eq "SVGMatrix";
-    return 1 if $type eq "SVGTransform";
-    return 0;
-}
-
 sub TypeCanFailConversion
 {
     my $signature = shift;
@@ -3063,15 +2903,13 @@ sub TypeCanFailConversion
     return 1 if $type eq "Attr";
     return 1 if $type eq "VoidCallback";
     return 1 if $type eq "IDBKey";
-    return BasicTypeCanFailConversion($signature);
+    return 0;
 }
 
 sub JSValueToNative
 {
     my $signature = shift;
     my $value = shift;
-    my $okParam = shift;
-    my $maybeOkParam = $okParam ? ", ${okParam}" : "";
 
     my $type = GetTypeFromSignature($signature);
 
@@ -3079,8 +2917,8 @@ sub JSValueToNative
     return "$value->BooleanValue()" if $type eq "boolean";
     return "static_cast<$type>($value->NumberValue())" if $type eq "float" or $type eq "double";
 
-    return "toInt32($value${maybeOkParam})" if $type eq "long";
-    return "toUInt32($value${maybeOkParam})" if $type eq "unsigned long" or $type eq "unsigned short";
+    return "toInt32($value)" if $type eq "long";
+    return "toUInt32($value)" if $type eq "unsigned long" or $type eq "unsigned short";
     return "toInt64($value)" if $type eq "unsigned long long" or $type eq "long long";
     return "static_cast<Range::CompareHow>($value->Int32Value())" if $type eq "CompareHow";
     return "static_cast<SVGPaint::SVGPaintType>($value->ToInt32()->Int32Value())" if $type eq "SVGPaintType";
@@ -3134,15 +2972,6 @@ sub JSValueToNative
     } else {
         $implIncludes{"V8$type.h"} = 1;
 
-        if (IsPodType($type)) {
-            my $nativeType = GetNativeType($type);
-            $implIncludes{"V8SVGPODTypeWrapper.h"} = 1;
-
-            return "V8SVGPODTypeUtil::toSVGPODType<${nativeType}>(&V8${type}::info, $value${maybeOkParam})"
-        }
-
-        $implIncludes{"V8${type}.h"} = 1;
-
         # Perform type checks on the parameter, if it is expected Node type,
         # return NULL.
         return "V8${type}::HasInstance($value) ? V8${type}::toNative(v8::Handle<v8::Object>::Cast($value)) : 0";
@@ -3239,14 +3068,6 @@ my %non_wrapper_types = (
     'DOMString' => 1,
     'CompareHow' => 1,
     'SerializedScriptValue' => 1,
-    'SVGAngle' => 1,
-    'SVGRect' => 1,
-    'SVGPoint' => 1,
-    'SVGPreserveAspectRatio' => 1,
-    'SVGMatrix' => 1,
-    'SVGTransform' => 1,
-    'SVGLength' => 1,
-    'SVGNumber' => 1,
     'SVGPaintType' => 1,
     'DOMTimeStamp' => 1,
     'JSObject' => 1,
@@ -3357,25 +3178,9 @@ sub ReturnNativeToJSValue
     $implIncludes{"wtf/RefPtr.h"} = 1;
     $implIncludes{"wtf/GetPtr.h"} = 1;
 
-    if (IsPodType($type)) {
-        $value = GenerateSVGStaticPodTypeWrapper($type, $value) . ".get()";
-    }
-
     return "return toV8($value)";
 }
 
-# FIXME: This method will go away once all SVG animated properties are converted to the new scheme.
-sub GenerateSVGStaticPodTypeWrapper {
-    my $type = shift;
-    my $value = shift;
-
-    $implIncludes{"V8$type.h"}=1;
-    $implIncludes{"V8SVGPODTypeWrapper.h"} = 1;
-
-    my $nativeType = GetNativeType($type);
-    return "V8SVGStaticPODTypeWrapper<$nativeType>::create($value)";
-}
-
 # Internal helper
 sub WriteData
 {
@@ -3426,7 +3231,7 @@ sub IsSVGTypeNeedingContextParameter
 
     return 0 unless $implClassName =~ /SVG/;
     return 0 if $implClassName =~ /Element/;
-    return 0 if $codeGenerator->IsSVGNewStyleAnimatedType($implClassName);
+    return 0 if $codeGenerator->IsSVGAnimatedType($implClassName);
     return 0 if $codeGenerator->IsSVGTypeNeedingTearOff($implClassName);
 
     my @noContextNeeded = ("SVGColor", "SVGDocument", "SVGPaintType", "SVGPaint", "SVGZoomEvent");
@@ -3455,19 +3260,9 @@ sub GenerateSVGContextRetrieval
     my $srcType = shift;
     my $indent = shift;
 
-    my $srcIsPodType = IsPodType($srcType);
-
-    my $srcObject = "imp";
-    if ($srcIsPodType) {
-        $srcObject = "impWrapper";
-    }
-
-    my $contextDecl;
-
+    my $contextDecl = "imp";
     if (IsSVGTypeNeedingContextParameter($srcType)) {
-        $contextDecl = "V8Proxy::svgContext($srcObject)";
-    } else {
-        $contextDecl = $srcObject;
+        $contextDecl = "V8Proxy::svgContext($contextDecl)";
     }
 
     return $indent . "SVGElement* context = $contextDecl;\n";
@@ -3487,26 +3282,6 @@ sub IsSVGListMutator
     return 0;
 }
 
-sub IsSVGListMethod
-{
-    my $functionName = shift;
-
-    return 1 if $functionName eq "getFirst";
-    return 1 if $functionName eq "getLast";
-    return 1 if $functionName eq "getItem";
-
-    return IsSVGListMutator($functionName);
-}
-
-sub IsSVGListTypeNeedingSpecialHandling
-{
-    my $className = shift;
-
-    return 1 if $className eq "SVGTransformList";
-
-    return 0;
-}
-
 sub GetVisibleInterfaceName
 {
     my $interfaceName = shift;
diff --git a/WebCore/bindings/v8/custom/V8SVGMatrixCustom.cpp b/WebCore/bindings/v8/custom/V8SVGMatrixCustom.cpp
deleted file mode 100644
index f310238..0000000
--- a/WebCore/bindings/v8/custom/V8SVGMatrixCustom.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc. All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * 
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- 
-#include <config.h>
-
-#if ENABLE(SVG)
-#include "AffineTransform.h"
-
-#include "SVGException.h"
-#include "V8Binding.h"
-#include "V8Proxy.h"
-#include "V8SVGMatrix.h"
-#include "V8SVGPODTypeWrapper.h"
-
-namespace WebCore {
-
-v8::Handle<v8::Value> V8SVGMatrix::multiplyCallback(const v8::Arguments& args)
-{
-    INC_STATS("DOM.SVGMatrix.multiply()");
-    if (args.Length() < 1)
-        return throwError("Not enough arguments");
-
-    if (!V8SVGMatrix::HasInstance(args[0]))
-        return throwError("secondMatrix argument was not a SVGMatrix");
-
-    AffineTransform m1 = *V8SVGPODTypeWrapper<AffineTransform>::toNative(args.Holder());
-    AffineTransform m2 = *V8SVGPODTypeWrapper<AffineTransform>::toNative(v8::Handle<v8::Object>::Cast(args[0]));
-
-    RefPtr<V8SVGStaticPODTypeWrapper<AffineTransform> > wrapper = V8SVGStaticPODTypeWrapper<AffineTransform>::create(m1.multLeft(m2));
-    return toV8(wrapper.get());
-}
-
-v8::Handle<v8::Value> V8SVGMatrix::inverseCallback(const v8::Arguments& args)
-{
-    INC_STATS("DOM.SVGMatrix.inverse()");
-    AffineTransform matrix = *V8SVGPODTypeWrapper<AffineTransform>::toNative(args.Holder());
-    ExceptionCode ec = 0;
-    AffineTransform result = matrix.inverse();
-
-    if (!matrix.isInvertible())
-        ec = SVGException::SVG_MATRIX_NOT_INVERTABLE;
-
-    if (ec != 0) {
-        V8Proxy::setDOMException(ec);
-        return v8::Handle<v8::Value>();
-    }
-
-    RefPtr<V8SVGStaticPODTypeWrapper<AffineTransform> > wrapper = V8SVGStaticPODTypeWrapper<AffineTransform>::create(result);
-    return toV8(wrapper.get());
-}
-
-v8::Handle<v8::Value> V8SVGMatrix::rotateFromVectorCallback(const v8::Arguments& args)
-{
-    INC_STATS("DOM.SVGMatrix.rotateFromVector()");
-    AffineTransform matrix = *V8SVGPODTypeWrapper<AffineTransform>::toNative(args.Holder());
-    ExceptionCode ec = 0;
-    float x = toFloat(args[0]);
-    float y = toFloat(args[1]);
-    AffineTransform result = matrix;
-    result.rotateFromVector(x, y);
-    if (x == 0.0 || y == 0.0)
-        ec = SVGException::SVG_INVALID_VALUE_ERR;
-
-    if (ec != 0) {
-        V8Proxy::setDOMException(ec);
-        return v8::Handle<v8::Value>();
-    }
-
-    RefPtr<V8SVGStaticPODTypeWrapper<AffineTransform> > wrapper = V8SVGStaticPODTypeWrapper<AffineTransform>::create(result);
-    return toV8(wrapper.get());
-}
-
-} // namespace WebCore
-
-#endif
diff --git a/WebCore/svg/DeprecatedSVGAnimatedPropertyTraits.h b/WebCore/svg/DeprecatedSVGAnimatedPropertyTraits.h
index e20a4c7..3e31095 100644
--- a/WebCore/svg/DeprecatedSVGAnimatedPropertyTraits.h
+++ b/WebCore/svg/DeprecatedSVGAnimatedPropertyTraits.h
@@ -22,26 +22,13 @@
 #define DeprecatedSVGAnimatedPropertyTraits_h
 
 #if ENABLE(SVG)
-#include "PlatformString.h"
-#include "SVGTransformList.h"
 
+// FIXME: Remove this file!
 namespace WebCore {
 
 template<typename Type>
 struct DeprecatedSVGAnimatedPropertyTraits : public Noncopyable { };
 
-// SVGAnimatedTransformList
-template<>
-struct DeprecatedSVGAnimatedPropertyTraits<SVGTransformList*> : public Noncopyable {
-    typedef SVGTransformList* PassType;
-    typedef SVGTransformList* ReturnType;
-    typedef RefPtr<SVGTransformList> StoredType;
-
-    static ReturnType null() { return 0; }
-    static ReturnType toReturnType(const StoredType& type) { return type.get(); }
-    static String toString(PassType type) { return type ? type->valueAsString() : String(); }
-};
-
 }
 
 #endif
diff --git a/WebCore/svg/DeprecatedSVGAnimatedTemplate.h b/WebCore/svg/DeprecatedSVGAnimatedTemplate.h
index 9258692..7021d12 100644
--- a/WebCore/svg/DeprecatedSVGAnimatedTemplate.h
+++ b/WebCore/svg/DeprecatedSVGAnimatedTemplate.h
@@ -27,10 +27,10 @@
 #include <wtf/Forward.h>
 #include <wtf/HashMap.h>
 
+// FIXME: Remove this file!
 namespace WebCore {
    
     class SVGElement;
-    class SVGTransformList;
 
     struct DeprecatedSVGAnimatedTypeWrapperKey {            
         // Empty value
@@ -151,9 +151,6 @@ namespace WebCore {
         return wrapper.release();
     }
 
-    // Common type definitions, to ease IDL generation.
-    typedef DeprecatedSVGAnimatedTemplate<SVGTransformList*> SVGAnimatedTransformList;
-
 }
 
 #endif
diff --git a/WebCore/svg/SVGAnimateTransformElement.cpp b/WebCore/svg/SVGAnimateTransformElement.cpp
index 7471ea7..f5d5aa8 100644
--- a/WebCore/svg/SVGAnimateTransformElement.cpp
+++ b/WebCore/svg/SVGAnimateTransformElement.cpp
@@ -86,15 +86,16 @@ void SVGAnimateTransformElement::parseMappedAttribute(Attribute* attr)
 }
 
     
-static PassRefPtr<SVGTransformList> transformListFor(SVGElement* element)
+static SVGTransformList* transformListFor(SVGElement* element)
 {
     ASSERT(element);
     if (element->isStyledTransformable())
-        return static_cast<SVGStyledTransformableElement*>(element)->transform();
+        return &static_cast<SVGStyledTransformableElement*>(element)->transform();
     if (element->hasTagName(SVGNames::textTag))
-        return static_cast<SVGTextElement*>(element)->transform();
+        return &static_cast<SVGTextElement*>(element)->transform();
     if (element->hasTagName(SVGNames::linearGradientTag) || element->hasTagName(SVGNames::radialGradientTag))
-        return static_cast<SVGGradientElement*>(element)->gradientTransform();
+        return &static_cast<SVGGradientElement*>(element)->gradientTransform();
+    // FIXME: Handle patternTransform, which is obviously missing!
     return 0;
 }
     
@@ -109,9 +110,8 @@ void SVGAnimateTransformElement::resetToBaseValue(const String& baseValue)
     }
 
     if (baseValue.isEmpty()) {
-        ExceptionCode ec;
-        RefPtr<SVGTransformList> list = transformListFor(targetElement());
-        list->clear(ec);
+        if (SVGTransformList* list = transformListFor(targetElement()))
+            list->clear();
     } else
         targetElement()->setAttribute(SVGNames::transformAttr, baseValue);
 }
@@ -121,18 +121,17 @@ void SVGAnimateTransformElement::calculateAnimatedValue(float percentage, unsign
     if (!hasValidTarget())
         return;
     SVGElement* targetElement = resultElement->targetElement();
-    RefPtr<SVGTransformList> transformList = transformListFor(targetElement);
+    SVGTransformList* transformList = transformListFor(targetElement);
     ASSERT(transformList);
 
-    ExceptionCode ec;
     if (!isAdditive())
-        transformList->clear(ec);
+        transformList->clear();
     if (isAccumulated() && repeat) {
         SVGTransform accumulatedTransform = SVGTransformDistance(m_fromTransform, m_toTransform).scaledDistance(repeat).addToSVGTransform(SVGTransform());
-        transformList->appendItem(accumulatedTransform, ec);
+        transformList->append(accumulatedTransform);
     }
     SVGTransform transform = SVGTransformDistance(m_fromTransform, m_toTransform).scaledDistance(percentage).addToSVGTransform(m_fromTransform);
-    transformList->appendItem(transform, ec);
+    transformList->append(transform);
 }
     
 bool SVGAnimateTransformElement::calculateFromAndToValues(const String& fromString, const String& toString)
@@ -181,18 +180,22 @@ void SVGAnimateTransformElement::applyResultsToTarget()
     }
 
     // ...except in case where we have additional instances in <use> trees.
+    SVGTransformList* transformList = transformListFor(targetElement);
+    if (!transformList)
+        return;
+
     const HashSet<SVGElementInstance*>& instances = targetElement->instancesForElement();
-    RefPtr<SVGTransformList> transformList = transformListFor(targetElement);
     const HashSet<SVGElementInstance*>::const_iterator end = instances.end();
     for (HashSet<SVGElementInstance*>::const_iterator it = instances.begin(); it != end; ++it) {
         SVGElement* shadowTreeElement = (*it)->shadowTreeElement();
         ASSERT(shadowTreeElement);
         if (shadowTreeElement->isStyledTransformable())
-            static_cast<SVGStyledTransformableElement*>(shadowTreeElement)->setTransformBaseValue(transformList.get());
+            static_cast<SVGStyledTransformableElement*>(shadowTreeElement)->setTransformBaseValue(*transformList);
         else if (shadowTreeElement->hasTagName(SVGNames::textTag))
-            static_cast<SVGTextElement*>(shadowTreeElement)->setTransformBaseValue(transformList.get());
+            static_cast<SVGTextElement*>(shadowTreeElement)->setTransformBaseValue(*transformList);
         else if (shadowTreeElement->hasTagName(SVGNames::linearGradientTag) || shadowTreeElement->hasTagName(SVGNames::radialGradientTag))
-            static_cast<SVGGradientElement*>(shadowTreeElement)->setGradientTransformBaseValue(transformList.get());
+            static_cast<SVGGradientElement*>(shadowTreeElement)->setGradientTransformBaseValue(*transformList);
+        // FIXME: Handle patternTransform, obviously missing!
         if (RenderObject* renderer = shadowTreeElement->renderer()) {
             renderer->setNeedsTransformUpdate();
             RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
diff --git a/WebCore/svg/SVGAnimatedTransformList.h b/WebCore/svg/SVGAnimatedTransformList.h
new file mode 100644
index 0000000..dcf87dd
--- /dev/null
+++ b/WebCore/svg/SVGAnimatedTransformList.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SVGAnimatedTransformList_h
+#define SVGAnimatedTransformList_h
+
+#if ENABLE(SVG)
+#include "SVGAnimatedTransformListPropertyTearOff.h"
+
+namespace WebCore {
+
+typedef SVGAnimatedTransformListPropertyTearOff SVGAnimatedTransformList;
+
+} // namespace WebCore
+
+#endif // ENABLE(SVG)
+#endif
diff --git a/WebCore/svg/SVGGradientElement.cpp b/WebCore/svg/SVGGradientElement.cpp
index ca61088..337944b 100644
--- a/WebCore/svg/SVGGradientElement.cpp
+++ b/WebCore/svg/SVGGradientElement.cpp
@@ -41,7 +41,6 @@ namespace WebCore {
 SVGGradientElement::SVGGradientElement(const QualifiedName& tagName, Document* document)
     : SVGStyledElement(tagName, document)
     , m_gradientUnits(SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
-    , m_gradientTransform(SVGTransformList::create(SVGNames::gradientTransformAttr))
 {
 }
 
@@ -53,11 +52,12 @@ void SVGGradientElement::parseMappedAttribute(Attribute* attr)
         else if (attr->value() == "objectBoundingBox")
             setGradientUnitsBaseValue(SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
     } else if (attr->name() == SVGNames::gradientTransformAttr) {
-        SVGTransformList* gradientTransforms = gradientTransformBaseValue();
-        if (!SVGTransformable::parseTransformAttribute(gradientTransforms, attr->value())) {
-            ExceptionCode ec = 0;
-            gradientTransforms->clear(ec);
-        }
+        SVGTransformList newList;
+        if (!SVGTransformable::parseTransformAttribute(newList, attr->value()))
+            newList.clear();
+
+        detachAnimatedGradientTransformListWrappers(newList.size());
+        gradientTransformBaseValue() = newList;
     } else if (attr->name() == SVGNames::spreadMethodAttr) {
         if (attr->value() == "reflect")
             setSpreadMethodBaseValue(SpreadMethodReflect);
diff --git a/WebCore/svg/SVGGradientElement.h b/WebCore/svg/SVGGradientElement.h
index 6e23608..1b28e22 100644
--- a/WebCore/svg/SVGGradientElement.h
+++ b/WebCore/svg/SVGGradientElement.h
@@ -24,6 +24,7 @@
 #if ENABLE(SVG)
 #include "Gradient.h"
 #include "SVGAnimatedPropertyMacros.h"
+#include "SVGAnimatedTransformList.h"
 #include "SVGExternalResourcesRequired.h"
 #include "SVGStyledElement.h"
 #include "SVGTransformList.h"
@@ -51,7 +52,7 @@ namespace WebCore {
 
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGGradientElement, SVGNames::spreadMethodAttr, int, SpreadMethod, spreadMethod)
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGGradientElement, SVGNames::gradientUnitsAttr, int, GradientUnits, gradientUnits)
-        DECLARE_ANIMATED_PROPERTY(SVGGradientElement, SVGNames::gradientTransformAttr, SVGTransformList*, GradientTransform, gradientTransform)
+        DECLARE_ANIMATED_TRANSFORM_LIST_PROPERTY_NEW(SVGGradientElement, SVGNames::gradientTransformAttr, SVGTransformList, GradientTransform, gradientTransform)
 
         // SVGURIReference
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGGradientElement, XLinkNames::hrefAttr, String, Href, href)
diff --git a/WebCore/svg/SVGLinearGradientElement.cpp b/WebCore/svg/SVGLinearGradientElement.cpp
index 840a31e..fa3e40c 100644
--- a/WebCore/svg/SVGLinearGradientElement.cpp
+++ b/WebCore/svg/SVGLinearGradientElement.cpp
@@ -127,8 +127,11 @@ void SVGLinearGradientElement::collectGradientAttributes(LinearGradientAttribute
         if (!attributes.hasBoundingBoxMode() && current->hasAttribute(SVGNames::gradientUnitsAttr))
             attributes.setBoundingBoxMode(current->gradientUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
 
-        if (!attributes.hasGradientTransform() && current->hasAttribute(SVGNames::gradientTransformAttr))
-            attributes.setGradientTransform(current->gradientTransform()->consolidate().matrix());
+        if (!attributes.hasGradientTransform() && current->hasAttribute(SVGNames::gradientTransformAttr)) {
+            AffineTransform transform;
+            current->gradientTransform().concatenate(transform);
+            attributes.setGradientTransform(transform);
+        }
 
         if (!attributes.hasStops()) {
             const Vector<Gradient::ColorStop>& stops(current->buildStops());
diff --git a/WebCore/svg/SVGMatrix.h b/WebCore/svg/SVGMatrix.h
new file mode 100644
index 0000000..807b703
--- /dev/null
+++ b/WebCore/svg/SVGMatrix.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SVGMatrix_h
+#define SVGMatrix_h
+
+#if ENABLE(SVG)
+#include "AffineTransform.h"
+#include "SVGException.h"
+
+namespace WebCore {
+
+// Only used in the bindings.
+class SVGMatrix : public AffineTransform {
+public:
+    SVGMatrix() { }
+    SVGMatrix(const AffineTransform& other)
+        : AffineTransform(other)
+    {
+    }
+
+    SVGMatrix(double a, double b, double c, double d, double e, double f)
+        : AffineTransform(a, b, c, d, e, f)
+    {
+    }
+
+    SVGMatrix translate(double tx, double ty)
+    {
+        AffineTransform copy = *this;
+        copy.translate(tx, ty);
+        return static_cast<SVGMatrix>(copy);
+    }
+
+    SVGMatrix scale(double s)
+    {
+        AffineTransform copy = *this;
+        copy.scale(s, s);
+        return static_cast<SVGMatrix>(copy);
+    }
+
+    SVGMatrix scaleNonUniform(double sx, double sy)
+    {
+        AffineTransform copy = *this;
+        copy.scale(sx, sy);
+        return static_cast<SVGMatrix>(copy);
+    }
+
+    SVGMatrix rotate(double d)
+    {
+        AffineTransform copy = *this;
+        copy.rotate(d);
+        return static_cast<SVGMatrix>(copy);
+    }
+
+    SVGMatrix flipX()
+    {
+        AffineTransform copy = *this;
+        copy.flipX();
+        return static_cast<SVGMatrix>(copy);
+    }
+
+    SVGMatrix flipY()
+    {
+        AffineTransform copy = *this;
+        copy.flipY();
+        return static_cast<SVGMatrix>(copy);
+    }
+
+    SVGMatrix skewX(double angle)
+    {
+        AffineTransform copy = *this;
+        copy.skewX(angle);
+        return static_cast<SVGMatrix>(copy);
+    }
+
+    SVGMatrix skewY(double angle)
+    {
+        AffineTransform copy = *this;
+        copy.skewY(angle);
+        return static_cast<SVGMatrix>(copy);
+    }
+
+    // SVGMatrix::multiply needs to call SVGMatrix::multLeft.
+    SVGMatrix multiply(const SVGMatrix& other)
+    {
+        AffineTransform copy = *this;
+        copy.multLeft(static_cast<const AffineTransform&>(other));
+        return static_cast<SVGMatrix>(copy);
+    }
+
+    SVGMatrix inverse(ExceptionCode& ec) const
+    {
+        AffineTransform transform = AffineTransform::inverse();
+        if (!isInvertible())
+            ec = SVGException::SVG_MATRIX_NOT_INVERTABLE;
+
+        return transform;
+    }
+
+    SVGMatrix rotateFromVector(double x, double y, ExceptionCode& ec)
+    {
+        if (!x || !y)
+            ec = SVGException::SVG_INVALID_VALUE_ERR;
+
+        AffineTransform copy = *this;
+        copy.rotateFromVector(x, y);
+        return static_cast<SVGMatrix>(copy);
+    }
+
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(SVG)
+#endif
diff --git a/WebCore/svg/SVGMatrix.idl b/WebCore/svg/SVGMatrix.idl
index c6e996d..270a62c 100644
--- a/WebCore/svg/SVGMatrix.idl
+++ b/WebCore/svg/SVGMatrix.idl
@@ -22,29 +22,29 @@
 
 module svg {
 
-    interface [Conditional=SVG, PODType=AffineTransform] SVGMatrix {
+    interface [Conditional=SVG] SVGMatrix {
         // FIXME: these attributes should all be floats but since we implement
         // AffineTransform with doubles setting these as doubles makes more sense.
-        attribute double a;
-        attribute double b;
-        attribute double c;
-        attribute double d;
-        attribute double e;
-        attribute double f;
+        attribute [StrictTypeChecking] double a;
+        attribute [StrictTypeChecking] double b;
+        attribute [StrictTypeChecking] double c;
+        attribute [StrictTypeChecking] double d;
+        attribute [StrictTypeChecking] double e;
+        attribute [StrictTypeChecking] double f;
 
-        [Custom] SVGMatrix multiply(in SVGMatrix secondMatrix);
-        [Custom] SVGMatrix inverse()
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix multiply(in SVGMatrix secondMatrix);
+        SVGMatrix inverse()
             raises(SVGException);
-        [Immutable] SVGMatrix translate(in float x, in float y);
-        [Immutable] SVGMatrix scale(in float scaleFactor);
-        [Immutable] SVGMatrix scaleNonUniform(in float scaleFactorX, in float scaleFactorY);
-        [Immutable] SVGMatrix rotate(in float angle);
-        [Custom] SVGMatrix rotateFromVector(in float x, in float y)
+        [Immutable, StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix translate(in float x, in float y);
+        [Immutable, StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix scale(in float scaleFactor);
+        [Immutable, StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix scaleNonUniform(in float scaleFactorX, in float scaleFactorY);
+        [Immutable, StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix rotate(in float angle);
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix rotateFromVector(in float x, in float y)
             raises(SVGException);
         [Immutable] SVGMatrix flipX();
         [Immutable] SVGMatrix flipY();
-        [Immutable] SVGMatrix skewX(in float angle);
-        [Immutable] SVGMatrix skewY(in float angle);
+        [Immutable, StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix skewX(in float angle);
+        [Immutable, StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix skewY(in float angle);
     };
 
 }
diff --git a/WebCore/svg/SVGPatternElement.cpp b/WebCore/svg/SVGPatternElement.cpp
index 0f3b5d4..229e1db 100644
--- a/WebCore/svg/SVGPatternElement.cpp
+++ b/WebCore/svg/SVGPatternElement.cpp
@@ -57,7 +57,6 @@ inline SVGPatternElement::SVGPatternElement(const QualifiedName& tagName, Docume
     , m_height(LengthModeHeight)
     , m_patternUnits(SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
     , m_patternContentUnits(SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE)
-    , m_patternTransform(SVGTransformList::create(SVGNames::patternTransformAttr))
 {
 }
 
@@ -79,11 +78,12 @@ void SVGPatternElement::parseMappedAttribute(Attribute* attr)
         else if (attr->value() == "objectBoundingBox")
             setPatternContentUnitsBaseValue(SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
     } else if (attr->name() == SVGNames::patternTransformAttr) {
-        SVGTransformList* patternTransforms = patternTransformBaseValue();
-        if (!SVGTransformable::parseTransformAttribute(patternTransforms, attr->value())) {
-            ExceptionCode ec = 0;
-            patternTransforms->clear(ec);
-        }
+        SVGTransformList newList;
+        if (!SVGTransformable::parseTransformAttribute(newList, attr->value()))
+            newList.clear();
+
+        detachAnimatedPatternTransformListWrappers(newList.size());
+        patternTransformBaseValue() = newList;
     } else if (attr->name() == SVGNames::xAttr)
         setXBaseValue(SVGLength(LengthModeWidth, attr->value()));
     else if (attr->name() == SVGNames::yAttr)
@@ -224,8 +224,11 @@ void SVGPatternElement::collectPatternAttributes(PatternAttributes& attributes)
         if (!attributes.hasBoundingBoxModeContent() && current->hasAttribute(SVGNames::patternContentUnitsAttr))
             attributes.setBoundingBoxModeContent(current->patternContentUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
 
-        if (!attributes.hasPatternTransform() && current->hasAttribute(SVGNames::patternTransformAttr))
-            attributes.setPatternTransform(current->patternTransform()->consolidate().matrix());
+        if (!attributes.hasPatternTransform() && current->hasAttribute(SVGNames::patternTransformAttr)) {
+            AffineTransform transform;
+            current->patternTransform().concatenate(transform);
+            attributes.setPatternTransform(transform);
+        }
 
         if (!attributes.hasPatternContentElement() && current->hasChildNodes())
             attributes.setPatternContentElement(current);
diff --git a/WebCore/svg/SVGPatternElement.h b/WebCore/svg/SVGPatternElement.h
index ce63a22..37f91ca 100644
--- a/WebCore/svg/SVGPatternElement.h
+++ b/WebCore/svg/SVGPatternElement.h
@@ -24,6 +24,7 @@
 #if ENABLE(SVG)
 #include "SVGAnimatedLength.h"
 #include "SVGAnimatedPropertyMacros.h"
+#include "SVGAnimatedTransformList.h"
 #include "SVGExternalResourcesRequired.h"
 #include "SVGFitToViewBox.h"
 #include "SVGLangSpace.h"
@@ -70,7 +71,7 @@ namespace WebCore {
         DECLARE_ANIMATED_PROPERTY_NEW(SVGPatternElement, SVGNames::heightAttr, SVGLength, Height, height)
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGPatternElement, SVGNames::patternUnitsAttr, int, PatternUnits, patternUnits)
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGPatternElement, SVGNames::patternContentUnitsAttr, int, PatternContentUnits, patternContentUnits)
-        DECLARE_ANIMATED_PROPERTY(SVGPatternElement, SVGNames::patternTransformAttr, SVGTransformList*, PatternTransform, patternTransform)
+        DECLARE_ANIMATED_TRANSFORM_LIST_PROPERTY_NEW(SVGPatternElement, SVGNames::patternTransformAttr, SVGTransformList, PatternTransform, patternTransform)
 
         // SVGURIReference
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGPatternElement, XLinkNames::hrefAttr, String, Href, href)
diff --git a/WebCore/svg/SVGPoint.idl b/WebCore/svg/SVGPoint.idl
index 19c6292..f6d2514 100644
--- a/WebCore/svg/SVGPoint.idl
+++ b/WebCore/svg/SVGPoint.idl
@@ -26,7 +26,7 @@ module svg {
         attribute [StrictTypeChecking] float x;
         attribute [StrictTypeChecking] float y;
 
-        SVGPoint matrixTransform(in SVGMatrix matrix);
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGPoint matrixTransform(in SVGMatrix matrix);
     };
 
 }
diff --git a/WebCore/svg/SVGRadialGradientElement.cpp b/WebCore/svg/SVGRadialGradientElement.cpp
index 584b1b6..aaf32bc 100644
--- a/WebCore/svg/SVGRadialGradientElement.cpp
+++ b/WebCore/svg/SVGRadialGradientElement.cpp
@@ -137,8 +137,11 @@ void SVGRadialGradientElement::collectGradientAttributes(RadialGradientAttribute
         if (!attributes.hasBoundingBoxMode() && current->hasAttribute(SVGNames::gradientUnitsAttr))
             attributes.setBoundingBoxMode(current->gradientUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
 
-        if (!attributes.hasGradientTransform() && current->hasAttribute(SVGNames::gradientTransformAttr))
-            attributes.setGradientTransform(current->gradientTransform()->consolidate().matrix());
+        if (!attributes.hasGradientTransform() && current->hasAttribute(SVGNames::gradientTransformAttr)) {
+            AffineTransform transform;
+            current->gradientTransform().concatenate(transform);
+            attributes.setGradientTransform(transform);
+        }
 
         if (!attributes.hasStops()) {
             const Vector<Gradient::ColorStop>& stops(current->buildStops());
diff --git a/WebCore/svg/SVGSVGElement.cpp b/WebCore/svg/SVGSVGElement.cpp
index 7e9862c..8628b70 100644
--- a/WebCore/svg/SVGSVGElement.cpp
+++ b/WebCore/svg/SVGSVGElement.cpp
@@ -449,9 +449,9 @@ FloatPoint SVGSVGElement::createSVGPoint()
     return FloatPoint();
 }
 
-AffineTransform SVGSVGElement::createSVGMatrix()
+SVGMatrix SVGSVGElement::createSVGMatrix()
 {
-    return AffineTransform();
+    return SVGMatrix();
 }
 
 FloatRect SVGSVGElement::createSVGRect()
@@ -464,9 +464,9 @@ SVGTransform SVGSVGElement::createSVGTransform()
     return SVGTransform(SVGTransform::SVG_TRANSFORM_MATRIX);
 }
 
-SVGTransform SVGSVGElement::createSVGTransformFromMatrix(const AffineTransform& matrix)
+SVGTransform SVGSVGElement::createSVGTransformFromMatrix(const SVGMatrix& matrix)
 {
-    return SVGTransform(matrix);
+    return SVGTransform(static_cast<const AffineTransform&>(matrix));
 }
 
 AffineTransform SVGSVGElement::localCoordinateSpaceTransform(SVGLocatable::CTMScope mode) const
@@ -582,8 +582,13 @@ AffineTransform SVGSVGElement::viewBoxToViewTransform(float viewWidth, float vie
         viewBoxRect = viewBox();
 
     AffineTransform ctm = SVGFitToViewBox::viewBoxToViewTransform(viewBoxRect, preserveAspectRatio(), viewWidth, viewHeight);
-    if (useCurrentView() && currentView())
-        return currentView()->transform()->concatenate().matrix() * ctm;
+    if (useCurrentView() && currentView()) {
+        AffineTransform transform;
+        if (!currentView()->transform().concatenate(transform))
+            return ctm;
+
+        return transform * ctm;
+    }
 
     return ctm;
 }
diff --git a/WebCore/svg/SVGSVGElement.h b/WebCore/svg/SVGSVGElement.h
index 7c65a2c..f73fb3f 100644
--- a/WebCore/svg/SVGSVGElement.h
+++ b/WebCore/svg/SVGSVGElement.h
@@ -35,6 +35,7 @@
 namespace WebCore {
     class SVGAngle;
     class SVGLength;
+    class SVGMatrix;
     class SVGTransform;
     class SVGViewSpec;
     class SVGViewElement;
@@ -108,10 +109,10 @@ namespace WebCore {
         static SVGLength createSVGLength();
         static SVGAngle createSVGAngle();
         static FloatPoint createSVGPoint();
-        static AffineTransform createSVGMatrix();
+        static SVGMatrix createSVGMatrix();
         static FloatRect createSVGRect();
         static SVGTransform createSVGTransform();
-        static SVGTransform createSVGTransformFromMatrix(const AffineTransform&);
+        static SVGTransform createSVGTransformFromMatrix(const SVGMatrix&);
 
         AffineTransform viewBoxToViewTransform(float viewWidth, float viewHeight) const;
 
diff --git a/WebCore/svg/SVGStyledTransformableElement.cpp b/WebCore/svg/SVGStyledTransformableElement.cpp
index 87d812c..e5cd42b 100644
--- a/WebCore/svg/SVGStyledTransformableElement.cpp
+++ b/WebCore/svg/SVGStyledTransformableElement.cpp
@@ -34,7 +34,6 @@ namespace WebCore {
 
 SVGStyledTransformableElement::SVGStyledTransformableElement(const QualifiedName& tagName, Document* document)
     : SVGStyledLocatableElement(tagName, document)
-    , m_transform(SVGTransformList::create(SVGNames::transformAttr))
 {
 }
 
@@ -54,9 +53,11 @@ AffineTransform SVGStyledTransformableElement::getScreenCTM(StyleUpdateStrategy
 
 AffineTransform SVGStyledTransformableElement::animatedLocalTransform() const
 {
-    return m_supplementalTransform ? *m_supplementalTransform * transform()->concatenate().matrix() : transform()->concatenate().matrix();
+    AffineTransform matrix;
+    transform().concatenate(matrix);
+    return m_supplementalTransform ? *m_supplementalTransform * matrix : matrix;
 }
-    
+
 AffineTransform* SVGStyledTransformableElement::supplementalTransform()
 {
     if (!m_supplementalTransform)
@@ -67,11 +68,11 @@ AffineTransform* SVGStyledTransformableElement::supplementalTransform()
 void SVGStyledTransformableElement::parseMappedAttribute(Attribute* attr)
 {
     if (SVGTransformable::isKnownAttribute(attr->name())) {
-        SVGTransformList* localTransforms = transformBaseValue();
-        if (!SVGTransformable::parseTransformAttribute(localTransforms, attr->value())) {
-            ExceptionCode ec = 0;
-            localTransforms->clear(ec);
-        }
+        SVGTransformList newList;
+        if (!SVGTransformable::parseTransformAttribute(newList, attr->value()))
+            newList.clear();
+        detachAnimatedTransformListWrappers(newList.size());
+        transformBaseValue() = newList;
     } else 
         SVGStyledLocatableElement::parseMappedAttribute(attr);
 }
diff --git a/WebCore/svg/SVGStyledTransformableElement.h b/WebCore/svg/SVGStyledTransformableElement.h
index f6309dd..54907c1 100644
--- a/WebCore/svg/SVGStyledTransformableElement.h
+++ b/WebCore/svg/SVGStyledTransformableElement.h
@@ -60,7 +60,7 @@ protected:
     virtual void parseMappedAttribute(Attribute*);
     virtual void synchronizeProperty(const QualifiedName&);
 
-    DECLARE_ANIMATED_PROPERTY(SVGStyledTransformableElement, SVGNames::transformAttr, SVGTransformList*, Transform, transform)
+    DECLARE_ANIMATED_TRANSFORM_LIST_PROPERTY_NEW(SVGStyledTransformableElement, SVGNames::transformAttr, SVGTransformList, Transform, transform)
 
 private:
     virtual bool isStyledTransformable() const { return true; }
diff --git a/WebCore/svg/SVGTextElement.cpp b/WebCore/svg/SVGTextElement.cpp
index e0b4366..bfa36c8 100644
--- a/WebCore/svg/SVGTextElement.cpp
+++ b/WebCore/svg/SVGTextElement.cpp
@@ -38,7 +38,6 @@ namespace WebCore {
 inline SVGTextElement::SVGTextElement(const QualifiedName& tagName, Document* doc)
     : SVGTextPositioningElement(tagName, doc)
     , SVGTransformable()
-    , m_transform(SVGTransformList::create(SVGNames::transformAttr))
 {
 }
 
@@ -50,11 +49,12 @@ PassRefPtr<SVGTextElement> SVGTextElement::create(const QualifiedName& tagName,
 void SVGTextElement::parseMappedAttribute(Attribute* attr)
 {
     if (SVGTransformable::isKnownAttribute(attr->name())) {
-        SVGTransformList* localTransforms = transformBaseValue();
-        if (!SVGTransformable::parseTransformAttribute(localTransforms, attr->value())) {
-            ExceptionCode ec = 0;
-            localTransforms->clear(ec);
-        }
+        SVGTransformList newList;
+        if (!SVGTransformable::parseTransformAttribute(newList, attr->value()))
+            newList.clear();
+
+        detachAnimatedTransformListWrappers(newList.size());
+        transformBaseValue() = newList;
     } else
         SVGTextPositioningElement::parseMappedAttribute(attr);
 }
@@ -86,7 +86,9 @@ AffineTransform SVGTextElement::getScreenCTM(StyleUpdateStrategy styleUpdateStra
 
 AffineTransform SVGTextElement::animatedLocalTransform() const
 {
-    return m_supplementalTransform ? *m_supplementalTransform * transform()->concatenate().matrix() : transform()->concatenate().matrix();
+    AffineTransform matrix;
+    transform().concatenate(matrix);
+    return m_supplementalTransform ? *m_supplementalTransform * matrix : matrix;
 }
 
 AffineTransform* SVGTextElement::supplementalTransform()
diff --git a/WebCore/svg/SVGTextElement.h b/WebCore/svg/SVGTextElement.h
index 00afa59..3bfee46 100644
--- a/WebCore/svg/SVGTextElement.h
+++ b/WebCore/svg/SVGTextElement.h
@@ -22,6 +22,7 @@
 #define SVGTextElement_h
 
 #if ENABLE(SVG)
+#include "SVGAnimatedTransformList.h"
 #include "SVGTextPositioningElement.h"
 #include "SVGTransformable.h"
 
@@ -54,7 +55,7 @@ namespace WebCore {
         virtual void svgAttributeChanged(const QualifiedName&);
         virtual void synchronizeProperty(const QualifiedName&);
 
-        DECLARE_ANIMATED_PROPERTY(SVGTextElement, SVGNames::transformAttr, SVGTransformList*, Transform, transform)
+        DECLARE_ANIMATED_TRANSFORM_LIST_PROPERTY_NEW(SVGTextElement, SVGNames::transformAttr, SVGTransformList, Transform, transform)
        
         // Used by <animateMotion>
         OwnPtr<AffineTransform> m_supplementalTransform;
diff --git a/WebCore/svg/SVGTransform.cpp b/WebCore/svg/SVGTransform.cpp
index 86774db..c39fe39 100644
--- a/WebCore/svg/SVGTransform.cpp
+++ b/WebCore/svg/SVGTransform.cpp
@@ -19,17 +19,17 @@
  */
 
 #include "config.h"
-#if ENABLE(SVG)
 
+#if ENABLE(SVG)
 #include "FloatPoint.h"
 #include "FloatSize.h"
 #include "SVGAngle.h"
 #include "SVGSVGElement.h"
 #include "SVGTransform.h"
 
-#include <math.h>
+#include <wtf/MathExtras.h>
 
-using namespace WebCore;
+namespace WebCore {
 
 SVGTransform::SVGTransform()
     : m_type(SVG_TRANSFORM_UNKNOWN)
@@ -40,8 +40,6 @@ SVGTransform::SVGTransform()
 SVGTransform::SVGTransform(SVGTransformType type)
     : m_type(type)
     , m_angle(0)
-    , m_center(FloatPoint())
-    , m_matrix(AffineTransform())
 {
 }
 
@@ -52,37 +50,20 @@ SVGTransform::SVGTransform(const AffineTransform& matrix)
 {
 }
 
-bool SVGTransform::isValid()
-{
-    return (m_type != SVG_TRANSFORM_UNKNOWN);
-}
-
-SVGTransform::SVGTransformType SVGTransform::type() const
-{
-    return m_type;
-}
-
-AffineTransform SVGTransform::matrix() const
-{
-    return m_matrix;
-}
-
-float SVGTransform::angle() const
+void SVGTransform::setMatrix(const AffineTransform& matrix)
 {
-    return m_angle;
-}
-
-FloatPoint SVGTransform::rotationCenter() const
-{
-    return m_center;
+    m_type = SVG_TRANSFORM_MATRIX;
+    m_angle = 0;
+    m_matrix = matrix;
 }
 
-void SVGTransform::setMatrix(AffineTransform matrix)
+void SVGTransform::updateMatrix()
 {
+    // The underlying matrix has been changed, alter the transformation type.
+    // Spec: In case the matrix object is changed directly (i.e., without using the methods on the SVGTransform interface itself)
+    // then the type of the SVGTransform changes to SVG_TRANSFORM_MATRIX.
     m_type = SVG_TRANSFORM_MATRIX;
     m_angle = 0;
-
-    m_matrix = matrix;
 }
 
 void SVGTransform::setTranslate(float tx, float ty)
@@ -145,5 +126,6 @@ void SVGTransform::setSkewY(float angle)
     m_matrix.skewY(angle);
 }
 
-#endif // ENABLE(SVG)
+} // namespace WebCore
 
+#endif // ENABLE(SVG)
diff --git a/WebCore/svg/SVGTransform.h b/WebCore/svg/SVGTransform.h
index db6a42f..36dd038 100644
--- a/WebCore/svg/SVGTransform.h
+++ b/WebCore/svg/SVGTransform.h
@@ -22,67 +22,70 @@
 #define SVGTransform_h
 
 #if ENABLE(SVG)
-#include "AffineTransform.h"
 #include "FloatPoint.h"
+#include "SVGMatrix.h"
 
 namespace WebCore {
-    
-    class FloatSize;
-
-    class SVGTransform {
-    public:
-        enum SVGTransformType {
-            SVG_TRANSFORM_UNKNOWN           = 0,
-            SVG_TRANSFORM_MATRIX            = 1,
-            SVG_TRANSFORM_TRANSLATE         = 2,
-            SVG_TRANSFORM_SCALE             = 3,
-            SVG_TRANSFORM_ROTATE            = 4,
-            SVG_TRANSFORM_SKEWX             = 5,
-            SVG_TRANSFORM_SKEWY             = 6
-        };
- 
-        SVGTransform();
-        SVGTransform(SVGTransformType);
-        explicit SVGTransform(const AffineTransform&);
 
-        SVGTransformType type() const;
+class FloatSize;
 
-        AffineTransform matrix() const;
-    
-        float angle() const;
-        FloatPoint rotationCenter() const;
-
-        void setMatrix(AffineTransform);
-
-        void setTranslate(float tx, float ty);
-        void setScale(float sx, float sy);
-        void setRotate(float angle, float cx, float cy);
-        void setSkewX(float angle);
-        void setSkewY(float angle);
-        
-        // Internal use only (animation system)
-        FloatPoint translate() const;
-        FloatSize scale() const;
-        
-        bool isValid();
-
-    private:
-        SVGTransformType m_type;
-        float m_angle;
-        FloatPoint m_center;
-        AffineTransform m_matrix;
+class SVGTransform {
+public:
+    enum SVGTransformType {
+        SVG_TRANSFORM_UNKNOWN = 0,
+        SVG_TRANSFORM_MATRIX = 1,
+        SVG_TRANSFORM_TRANSLATE = 2,
+        SVG_TRANSFORM_SCALE = 3,
+        SVG_TRANSFORM_ROTATE = 4,
+        SVG_TRANSFORM_SKEWX = 5,
+        SVG_TRANSFORM_SKEWY = 6
     };
+ 
+    SVGTransform();
+    SVGTransform(SVGTransformType);
+    explicit SVGTransform(const AffineTransform&);
 
-    inline bool operator==(const SVGTransform& a, const SVGTransform& b)
-    {
-        return a.type() == b.type() && a.angle() == b.angle() && a.matrix() == b.matrix();
-    }
-    
-    inline bool operator!=(const SVGTransform& a, const SVGTransform& b)
-    {
-        return !(a == b);
-    }
+    SVGTransformType type() const { return m_type; }
+
+    SVGMatrix& svgMatrix() { return static_cast<SVGMatrix&>(m_matrix); }
+    AffineTransform matrix() const { return m_matrix; }
+    void updateMatrix();
+
+    float angle() const { return m_angle; }
+    FloatPoint rotationCenter() const { return m_center; }
+
+    void setMatrix(const AffineTransform&);
+    void setTranslate(float tx, float ty);
+    void setScale(float sx, float sy);
+    void setRotate(float angle, float cx, float cy);
+    void setSkewX(float angle);
+    void setSkewY(float angle);
     
+    // Internal use only (animation system)
+    FloatPoint translate() const;
+    FloatSize scale() const;
+
+    bool isValid() const { return m_type != SVG_TRANSFORM_UNKNOWN; }
+
+private:
+    friend bool operator==(const SVGTransform& a, const SVGTransform& b);
+
+    SVGTransformType m_type;
+    float m_angle;
+    FloatPoint m_center;
+    AffineTransform m_matrix;
+};
+
+inline bool operator==(const SVGTransform& a, const SVGTransform& b)
+{
+    return a.m_type == b.m_type && a.m_angle == b.m_angle && a.m_matrix == b.m_matrix;
+}
+
+inline bool operator!=(const SVGTransform& a, const SVGTransform& b)
+{
+    return !(a == b);
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
diff --git a/WebCore/svg/SVGTransform.idl b/WebCore/svg/SVGTransform.idl
index dde234c..773ad6c 100644
--- a/WebCore/svg/SVGTransform.idl
+++ b/WebCore/svg/SVGTransform.idl
@@ -21,26 +21,26 @@
 
 module svg {
 
-    interface [Conditional=SVG, PODType=SVGTransform] SVGTransform { 
+    interface [Conditional=SVG] SVGTransform { 
         // Transform Types
-        const unsigned short SVG_TRANSFORM_UNKNOWN   = 0;
-        const unsigned short SVG_TRANSFORM_MATRIX    = 1;
+        const unsigned short SVG_TRANSFORM_UNKNOWN = 0;
+        const unsigned short SVG_TRANSFORM_MATRIX = 1;
         const unsigned short SVG_TRANSFORM_TRANSLATE = 2;
-        const unsigned short SVG_TRANSFORM_SCALE     = 3;
-        const unsigned short SVG_TRANSFORM_ROTATE    = 4;
-        const unsigned short SVG_TRANSFORM_SKEWX     = 5;
-        const unsigned short SVG_TRANSFORM_SKEWY     = 6;
+        const unsigned short SVG_TRANSFORM_SCALE = 3;
+        const unsigned short SVG_TRANSFORM_ROTATE = 4;
+        const unsigned short SVG_TRANSFORM_SKEWX = 5;
+        const unsigned short SVG_TRANSFORM_SKEWY = 6;
 
         readonly attribute unsigned short type;
         readonly attribute SVGMatrix matrix;
         readonly attribute float angle;
 
-        void setMatrix(in SVGMatrix matrix);
-        void setTranslate(in float tx, in float ty);
-        void setScale(in float sx, in float sy);
-        void setRotate(in float angle, in float cx, in float cy);
-        void setSkewX(in float angle);
-        void setSkewY(in float angle);
+        [StrictTypeChecking, RequiresAllArguments=Raise] void setMatrix(in SVGMatrix matrix);
+        [StrictTypeChecking, RequiresAllArguments=Raise] void setTranslate(in float tx, in float ty);
+        [StrictTypeChecking, RequiresAllArguments=Raise] void setScale(in float sx, in float sy);
+        [StrictTypeChecking, RequiresAllArguments=Raise] void setRotate(in float angle, in float cx, in float cy);
+        [StrictTypeChecking, RequiresAllArguments=Raise] void setSkewX(in float angle);
+        [StrictTypeChecking, RequiresAllArguments=Raise] void setSkewY(in float angle);
     };
 
 }
diff --git a/WebCore/svg/SVGTransformList.cpp b/WebCore/svg/SVGTransformList.cpp
index ae2f298..9137a89 100644
--- a/WebCore/svg/SVGTransformList.cpp
+++ b/WebCore/svg/SVGTransformList.cpp
@@ -26,53 +26,52 @@
 #include "AffineTransform.h"
 #include "SVGSVGElement.h"
 #include "SVGTransform.h"
+#include <wtf/text/StringConcatenate.h>
+#include <wtf/text/StringBuilder.h>
 
-using namespace WebCore;
+namespace WebCore {
 
-SVGTransformList::SVGTransformList(const QualifiedName& attributeName)
-    : SVGPODList<SVGTransform>(attributeName)
-{
-}
-
-SVGTransformList::~SVGTransformList()
-{
-}
-
-SVGTransform SVGTransformList::createSVGTransformFromMatrix(const AffineTransform& matrix) const
+SVGTransform SVGTransformList::createSVGTransformFromMatrix(const SVGMatrix& matrix) const
 {
     return SVGSVGElement::createSVGTransformFromMatrix(matrix);
 }
 
 SVGTransform SVGTransformList::consolidate()
 {
-    ExceptionCode ec = 0;
-    return initialize(concatenate(), ec);
+    AffineTransform matrix;
+    if (!concatenate(matrix))
+        return SVGTransform();
+
+    SVGTransform transform(matrix);
+    clear();
+    append(transform);
+    return transform;
 }
 
-SVGTransform SVGTransformList::concatenate() const
+bool SVGTransformList::concatenate(AffineTransform& result) const
 {
-    unsigned int length = numberOfItems();
-    if (!length)
-        return SVGTransform();
-        
-    AffineTransform matrix;
-    ExceptionCode ec = 0;
-    for (unsigned int i = 0; i < length; i++)
-        matrix = getItem(i, ec).matrix() * matrix;
+    unsigned size = this->size();
+    if (!size)
+        return false;
 
-    return SVGTransform(matrix);
+    for (unsigned i = 0; i < size; ++i)
+        result = at(i).matrix() * result;
+
+    return true;
 }
 
 String SVGTransformList::valueAsString() const
 {
     // TODO: We may want to build a real transform string, instead of concatting to a matrix(...).
-    SVGTransform transform = concatenate();
-    if (transform.type() == SVGTransform::SVG_TRANSFORM_MATRIX) {
-        AffineTransform matrix = transform.matrix();
-        return String::format("matrix(%f %f %f %f %f %f)", matrix.a(), matrix.b(), matrix.c(), matrix.d(), matrix.e(), matrix.f());
-    }
+    AffineTransform matrix;
+    concatenate(matrix);
 
-    return String();
+    StringBuilder builder;
+    builder.append(makeString("matrix(", String::number(matrix.a()), ' ', String::number(matrix.b()), ' ', String::number(matrix.c()), ' '));
+    builder.append(makeString(String::number(matrix.d()), ' ', String::number(matrix.e()), ' ', String::number(matrix.f()), ')'));
+    return builder.toString();
 }
 
+} // namespace WebCore
+
 #endif // ENABLE(SVG)
diff --git a/WebCore/svg/SVGTransformList.h b/WebCore/svg/SVGTransformList.h
index 5bb5e85..e071355 100644
--- a/WebCore/svg/SVGTransformList.h
+++ b/WebCore/svg/SVGTransformList.h
@@ -22,29 +22,24 @@
 #define SVGTransformList_h
 
 #if ENABLE(SVG)
-#include "SVGList.h"
 #include "SVGTransform.h"
-#include <wtf/Forward.h>
-#include <wtf/PassRefPtr.h>
+#include <wtf/Vector.h>
+#include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
-    class SVGTransformList : public SVGPODList<SVGTransform> {
-    public:
-        static PassRefPtr<SVGTransformList> create(const QualifiedName& attributeName) { return adoptRef(new SVGTransformList(attributeName)); }
-        virtual ~SVGTransformList();
+class SVGTransformList : public Vector<SVGTransform> {
+public:
+    SVGTransformList() { }
 
-        SVGTransform createSVGTransformFromMatrix(const AffineTransform&) const;
-        SVGTransform consolidate();
+    SVGTransform createSVGTransformFromMatrix(const SVGMatrix&) const;
+    SVGTransform consolidate();
 
-        // Internal use only
-        SVGTransform concatenate() const;
+    // Internal use only
+    bool concatenate(AffineTransform& result) const;
  
-        String valueAsString() const;
-
-    private:
-        SVGTransformList(const QualifiedName&);
-    };
+    String valueAsString() const;
+};
 
 } // namespace WebCore
 
diff --git a/WebCore/svg/SVGTransformList.idl b/WebCore/svg/SVGTransformList.idl
index 08252c3..cdd813d 100644
--- a/WebCore/svg/SVGTransformList.idl
+++ b/WebCore/svg/SVGTransformList.idl
@@ -31,20 +31,22 @@ module svg {
 
         void clear()
             raises(DOMException);
-        SVGTransform initialize(in SVGTransform item)
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGTransform initialize(in SVGTransform item)
             raises(DOMException, SVGException);
-        SVGTransform getItem(in unsigned long index)
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGTransform getItem(in unsigned long index)
             raises(DOMException);
-        SVGTransform insertItemBefore(in SVGTransform item, in unsigned long index)
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGTransform insertItemBefore(in SVGTransform item, in unsigned long index)
             raises(DOMException, SVGException);
-        SVGTransform replaceItem(in SVGTransform item, in unsigned long index)
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGTransform replaceItem(in SVGTransform item, in unsigned long index)
             raises(DOMException, SVGException);
-        SVGTransform removeItem(in unsigned long index)
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGTransform removeItem(in unsigned long index)
             raises(DOMException);
-        SVGTransform appendItem(in SVGTransform item)
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGTransform appendItem(in SVGTransform item)
             raises(DOMException, SVGException);
-        SVGTransform createSVGTransformFromMatrix(in SVGMatrix matrix);
-        SVGTransform consolidate();
+
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGTransform createSVGTransformFromMatrix(in SVGMatrix matrix);
+        SVGTransform consolidate()
+            raises(DOMException);
     };
 
 }
diff --git a/WebCore/svg/SVGTransformable.cpp b/WebCore/svg/SVGTransformable.cpp
index a25e086..006bb94 100644
--- a/WebCore/svg/SVGTransformable.cpp
+++ b/WebCore/svg/SVGTransformable.cpp
@@ -89,7 +89,7 @@ static int parseTransformParamList(const UChar*& ptr, const UChar* end, float* v
 static const int requiredValuesForType[] =  {0, 6, 1, 1, 1, 1, 1};
 static const int optionalValuesForType[] =  {0, 0, 1, 1, 2, 0, 0};
 
-bool SVGTransformable::parseTransformValue(unsigned type, const UChar*& ptr, const UChar* end, SVGTransform& t)
+bool SVGTransformable::parseTransformValue(unsigned type, const UChar*& ptr, const UChar* end, SVGTransform& transform)
 {
     if (type == SVGTransform::SVG_TRANSFORM_UNKNOWN)
         return false;
@@ -100,33 +100,33 @@ bool SVGTransformable::parseTransformValue(unsigned type, const UChar*& ptr, con
         return false;
 
     switch (type) {
-        case SVGTransform::SVG_TRANSFORM_SKEWX:
-           t.setSkewX(values[0]);
-            break;
-        case SVGTransform::SVG_TRANSFORM_SKEWY:
-               t.setSkewY(values[0]);
-            break;
-        case SVGTransform::SVG_TRANSFORM_SCALE:
-              if (valueCount == 1) // Spec: if only one param given, assume uniform scaling
-                  t.setScale(values[0], values[0]);
-              else
-                  t.setScale(values[0], values[1]);
-            break;
-        case SVGTransform::SVG_TRANSFORM_TRANSLATE:
-              if (valueCount == 1) // Spec: if only one param given, assume 2nd param to be 0
-                  t.setTranslate(values[0], 0);
-              else
-                  t.setTranslate(values[0], values[1]);
-            break;
-        case SVGTransform::SVG_TRANSFORM_ROTATE:
-              if (valueCount == 1)
-                  t.setRotate(values[0], 0, 0);
-              else
-                  t.setRotate(values[0], values[1], values[2]);
-            break;
-        case SVGTransform::SVG_TRANSFORM_MATRIX:
-            t.setMatrix(AffineTransform(values[0], values[1], values[2], values[3], values[4], values[5]));
-            break;
+    case SVGTransform::SVG_TRANSFORM_SKEWX:
+        transform.setSkewX(values[0]);
+        break;
+    case SVGTransform::SVG_TRANSFORM_SKEWY:
+        transform.setSkewY(values[0]);
+        break;
+    case SVGTransform::SVG_TRANSFORM_SCALE:
+        if (valueCount == 1) // Spec: if only one param given, assume uniform scaling
+            transform.setScale(values[0], values[0]);
+        else
+            transform.setScale(values[0], values[1]);
+        break;
+    case SVGTransform::SVG_TRANSFORM_TRANSLATE:
+        if (valueCount == 1) // Spec: if only one param given, assume 2nd param to be 0
+            transform.setTranslate(values[0], 0);
+        else
+            transform.setTranslate(values[0], values[1]);
+        break;
+    case SVGTransform::SVG_TRANSFORM_ROTATE:
+        if (valueCount == 1)
+            transform.setRotate(values[0], 0, 0);
+        else
+            transform.setRotate(values[0], values[1], values[2]);
+        break;
+    case SVGTransform::SVG_TRANSFORM_MATRIX:
+        transform.setMatrix(AffineTransform(values[0], values[1], values[2], values[3], values[4], values[5]));
+        break;
     }
 
     return true;
@@ -165,19 +165,16 @@ static inline bool parseAndSkipType(const UChar*& currTransform, const UChar* en
     return true;
 }
 
-bool SVGTransformable::parseTransformAttribute(SVGTransformList* list, const AtomicString& transform)
+bool SVGTransformable::parseTransformAttribute(SVGTransformList& list, const AtomicString& transform)
 {
     const UChar* start = transform.characters();
     return parseTransformAttribute(list, start, start + transform.length());
 }
 
-bool SVGTransformable::parseTransformAttribute(SVGTransformList* list, const UChar*& currTransform, const UChar* end, TransformParsingMode mode)
+bool SVGTransformable::parseTransformAttribute(SVGTransformList& list, const UChar*& currTransform, const UChar* end, TransformParsingMode mode)
 {
-    ExceptionCode ec = 0;
-    if (mode == ClearList) {
-        list->clear(ec);
-        ASSERT(!ec);
-    }
+    if (mode == ClearList)
+        list.clear();
 
     bool delimParsed = false;
     while (currTransform < end) {
@@ -188,11 +185,11 @@ bool SVGTransformable::parseTransformAttribute(SVGTransformList* list, const UCh
         if (!parseAndSkipType(currTransform, end, type))
             return false;
 
-        SVGTransform t;
-        if (!parseTransformValue(type, currTransform, end, t))
+        SVGTransform transform;
+        if (!parseTransformValue(type, currTransform, end, transform))
             return false;
 
-        list->appendItem(t, ec);
+        list.append(transform);
         skipOptionalSpaces(currTransform, end);
         if (currTransform < end && *currTransform == ',') {
             delimParsed = true;
diff --git a/WebCore/svg/SVGTransformable.h b/WebCore/svg/SVGTransformable.h
index e2fec4e..1cd2881 100644
--- a/WebCore/svg/SVGTransformable.h
+++ b/WebCore/svg/SVGTransformable.h
@@ -40,8 +40,8 @@ public:
         DoNotClearList
     };
 
-    static bool parseTransformAttribute(SVGTransformList*, const AtomicString& transform);
-    static bool parseTransformAttribute(SVGTransformList*, const UChar*& ptr, const UChar* end, TransformParsingMode mode = ClearList);
+    static bool parseTransformAttribute(SVGTransformList&, const AtomicString& transform);
+    static bool parseTransformAttribute(SVGTransformList&, const UChar*& ptr, const UChar* end, TransformParsingMode mode = ClearList);
     static bool parseTransformValue(unsigned type, const UChar*& ptr, const UChar* end, SVGTransform&);
 
     virtual AffineTransform localCoordinateSpaceTransform(SVGLocatable::CTMScope) const { return animatedLocalTransform(); }
diff --git a/WebCore/svg/SVGViewSpec.cpp b/WebCore/svg/SVGViewSpec.cpp
index 2eafff1..d6bade3 100644
--- a/WebCore/svg/SVGViewSpec.cpp
+++ b/WebCore/svg/SVGViewSpec.cpp
@@ -33,13 +33,12 @@ namespace WebCore {
 
 SVGViewSpec::SVGViewSpec(SVGElement* contextElement)
     : m_contextElement(contextElement)
-    , m_transform(SVGTransformList::create(SVGNames::transformAttr))
 {
 }
 
 void SVGViewSpec::setTransform(const String& transform)
 {
-    SVGTransformable::parseTransformAttribute(m_transform.get(), transform);
+    SVGTransformable::parseTransformAttribute(m_transform, transform);
 }
 
 void SVGViewSpec::setViewBoxString(const String& viewBoxStr)
@@ -144,7 +143,7 @@ bool SVGViewSpec::parseViewSpec(const String& viewSpec)
             if (currViewSpec >= end || *currViewSpec != '(')
                 return false;
             currViewSpec++;
-            SVGTransformable::parseTransformAttribute(m_transform.get(), currViewSpec, end, SVGTransformable::DoNotClearList);
+            SVGTransformable::parseTransformAttribute(m_transform, currViewSpec, end, SVGTransformable::DoNotClearList);
             if (currViewSpec >= end || *currViewSpec != ')')
                 return false;
             currViewSpec++;
diff --git a/WebCore/svg/SVGViewSpec.h b/WebCore/svg/SVGViewSpec.h
index f557d23..dd466ef 100644
--- a/WebCore/svg/SVGViewSpec.h
+++ b/WebCore/svg/SVGViewSpec.h
@@ -42,7 +42,7 @@ namespace WebCore {
         bool parseViewSpec(const String&);
 
         void setTransform(const String&);
-        SVGTransformList* transform() const { return m_transform.get(); }
+        SVGTransformList transform() const { return m_transform; }
 
         void setViewBoxString(const String&);
 
@@ -61,7 +61,7 @@ namespace WebCore {
         DECLARE_ANIMATED_PROPERTY_NEW(SVGViewSpec, SVGNames::viewBoxAttr, FloatRect, ViewBox, viewBox)
         DECLARE_ANIMATED_PROPERTY_NEW(SVGViewSpec, SVGNames::preserveAspectRatioAttr, SVGPreserveAspectRatio, PreserveAspectRatio, preserveAspectRatio)
 
-        mutable RefPtr<SVGTransformList> m_transform;
+        SVGTransformList m_transform;
         String m_viewTargetString;
     };
 
diff --git a/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h b/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h
index 0777b6a..40d3888 100644
--- a/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h
+++ b/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h
@@ -91,6 +91,7 @@ private:
         return adoptRef(new SVGAnimatedListPropertyTearOff<PropertyType>(contextElement, attributeName, values));
     }
 
+protected:
     SVGAnimatedListPropertyTearOff(SVGElement* contextElement, const QualifiedName& attributeName, PropertyType& values)
         : SVGAnimatedProperty(contextElement, attributeName)
         , m_values(values)
@@ -99,7 +100,6 @@ private:
             m_wrappers.fill(0, values.size());
     }
 
-private:
     PropertyType& m_values;
 
     // FIXME: The list wrapper cache is shared between baseVal/animVal. If we implement animVal,
diff --git a/WebCore/svg/properties/SVGAnimatedPropertyMacros.h b/WebCore/svg/properties/SVGAnimatedPropertyMacros.h
index e1c75b9..870d26e 100644
--- a/WebCore/svg/properties/SVGAnimatedPropertyMacros.h
+++ b/WebCore/svg/properties/SVGAnimatedPropertyMacros.h
@@ -27,6 +27,7 @@
 #include "SVGAnimatedStaticPropertyTearOff.h"
 #include "SVGAnimatedPropertySynchronizer.h"
 #include "SVGAnimatedPropertyTearOff.h"
+#include "SVGAnimatedTransformListPropertyTearOff.h"
 #include "SVGNames.h" // FIXME: Temporary hack, until we expand the macros in all files, so we don't need a global SVGNames.h include
 #include "SVGPropertyTraits.h"
 
@@ -156,6 +157,19 @@ void detachAnimated##UpperProperty##ListWrappers(unsigned newListSize) \
     static_cast<SVGAnimatedListPropertyTearOff<PropertyType>*>(wrapper)->detachListWrappers(newListSize); \
 }
 
+#define DECLARE_ANIMATED_TRANSFORM_LIST_PROPERTY_NEW(OwnerType, DOMAttribute, PropertyType, UpperProperty, LowerProperty) \
+DECLARE_ANIMATED_PROPERTY_NEW_SHARED(OwnerType, DOMAttribute, DOMAttribute.localName(), SVGAnimatedTransformListPropertyTearOff, PropertyType, UpperProperty, LowerProperty) \
+\
+void detachAnimated##UpperProperty##ListWrappers(unsigned newListSize) \
+{ \
+    SVGElement* contextElement = GetOwnerElementForType<OwnerType, IsDerivedFromSVGElement<OwnerType>::value>::ownerElement(this); \
+    SVGAnimatedProperty* wrapper = SVGAnimatedProperty::lookupWrapper<SVGAnimatedTransformListPropertyTearOff>(contextElement, DOMAttribute.localName()); \
+    if (!wrapper) \
+        return; \
+    static_cast<SVGAnimatedTransformListPropertyTearOff*>(wrapper)->detachListWrappers(newListSize); \
+}
+
+
 }
 
 #endif // ENABLE(SVG)
diff --git a/WebCore/svg/properties/SVGAnimatedTransformListPropertyTearOff.h b/WebCore/svg/properties/SVGAnimatedTransformListPropertyTearOff.h
new file mode 100644
index 0000000..2aa94c3
--- /dev/null
+++ b/WebCore/svg/properties/SVGAnimatedTransformListPropertyTearOff.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SVGAnimatedTransformListPropertyTearOff_h
+#define SVGAnimatedTransformListPropertyTearOff_h
+
+#if ENABLE(SVG)
+#include "SVGAnimatedListPropertyTearOff.h"
+#include "SVGTransformList.h"
+#include "SVGTransformListPropertyTearOff.h"
+
+namespace WebCore {
+
+class SVGAnimatedTransformListPropertyTearOff : public SVGAnimatedListPropertyTearOff<SVGTransformList> {
+public:
+    SVGProperty* baseVal()
+    {
+        if (!m_baseVal)
+            m_baseVal = SVGTransformListPropertyTearOff::create(this, BaseValRole);
+        return m_baseVal.get();
+    }
+
+    SVGProperty* animVal()
+    {
+        if (!m_animVal)
+            m_animVal = SVGTransformListPropertyTearOff::create(this, AnimValRole);
+        return m_animVal.get();
+    }
+
+private:
+    friend class SVGAnimatedProperty;
+
+    static PassRefPtr<SVGAnimatedTransformListPropertyTearOff> create(SVGElement* contextElement, const QualifiedName& attributeName, SVGTransformList& values)
+    {
+        ASSERT(contextElement);
+        return adoptRef(new SVGAnimatedTransformListPropertyTearOff(contextElement, attributeName, values));
+    }
+
+    SVGAnimatedTransformListPropertyTearOff(SVGElement* contextElement, const QualifiedName& attributeName, SVGTransformList& values)
+        : SVGAnimatedListPropertyTearOff<SVGTransformList>(contextElement, attributeName, values)
+    {
+    }
+};
+
+}
+
+#endif // ENABLE(SVG)
+#endif // SVGAnimatedTransformListPropertyTearOff_h
diff --git a/WebCore/svg/properties/SVGListPropertyTearOff.h b/WebCore/svg/properties/SVGListPropertyTearOff.h
index 56d626f..5a71735 100644
--- a/WebCore/svg/properties/SVGListPropertyTearOff.h
+++ b/WebCore/svg/properties/SVGListPropertyTearOff.h
@@ -109,7 +109,7 @@ public:
         return Base::appendItemValuesAndWrappers(m_animatedProperty.get(), passNewItem, ec);
     }
 
-private:
+protected:
     SVGListPropertyTearOff(AnimatedListPropertyTearOff* animatedProperty, SVGPropertyRole role)
         : SVGListProperty<PropertyType>(role)
         , m_animatedProperty(animatedProperty)
@@ -179,7 +179,6 @@ private:
         }
     }
 
-private:
     // Back pointer to the animated property that created us
     // For example (text.x.baseVal): m_animatedProperty points to the 'x' SVGAnimatedLengthList object
     RefPtr<AnimatedListPropertyTearOff> m_animatedProperty;
diff --git a/WebCore/svg/properties/SVGProperty.h b/WebCore/svg/properties/SVGProperty.h
index 43167b7..104fb0e 100644
--- a/WebCore/svg/properties/SVGProperty.h
+++ b/WebCore/svg/properties/SVGProperty.h
@@ -34,6 +34,8 @@ enum SVGPropertyRole {
 class SVGProperty : public RefCounted<SVGProperty> {
 public:
     virtual ~SVGProperty() { }
+
+    virtual void commitChange() = 0;
 };
 
 }
diff --git a/WebCore/svg/properties/SVGPropertyTearOff.h b/WebCore/svg/properties/SVGPropertyTearOff.h
index 2ffaede..219a4a6 100644
--- a/WebCore/svg/properties/SVGPropertyTearOff.h
+++ b/WebCore/svg/properties/SVGPropertyTearOff.h
@@ -69,6 +69,9 @@ public:
 
     void detachWrapper()
     {
+        if (m_valueIsCopy)
+            return;
+
         // Switch from a live value, to a non-live value.
         // For example: <text x="50"/>
         // var item = text.x.baseVal.getItem(0);
@@ -76,7 +79,6 @@ public:
         // item.value still has to report '50' and it has to be possible to modify 'item'
         // w/o changing the "new item" (with x=100) in the text element.
         // Whenever the XML DOM modifies the "x" attribute, all existing wrappers are detached, using this function.
-        ASSERT(!m_valueIsCopy);
         m_value = new PropertyType(*m_value);
         m_valueIsCopy = true;
         m_animatedProperty = 0;
diff --git a/WebCore/svg/properties/SVGPropertyTraits.h b/WebCore/svg/properties/SVGPropertyTraits.h
index 85bca7e..5364853 100644
--- a/WebCore/svg/properties/SVGPropertyTraits.h
+++ b/WebCore/svg/properties/SVGPropertyTraits.h
@@ -30,6 +30,7 @@
 #include "SVGPointList.h"
 #include "SVGPreserveAspectRatio.h"
 #include "SVGStringList.h"
+#include "SVGTransformList.h"
 #include <wtf/text/StringBuilder.h>
 
 namespace WebCore {
@@ -130,6 +131,13 @@ struct SVGPropertyTraits<SVGPointList> {
     typedef FloatPoint ListItemType;
 };
 
+template<>
+struct SVGPropertyTraits<SVGTransformList> {
+    static SVGTransformList initialValue() { return SVGTransformList(); }
+    static String toString(const SVGTransformList& type) { return type.valueAsString(); }
+    typedef SVGTransform ListItemType;
+};
+
 }
 
 #endif
diff --git a/WebCore/svg/properties/SVGStaticPropertyWithParentTearOff.h b/WebCore/svg/properties/SVGStaticPropertyWithParentTearOff.h
new file mode 100644
index 0000000..1e58341
--- /dev/null
+++ b/WebCore/svg/properties/SVGStaticPropertyWithParentTearOff.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SVGStaticPropertyWithParentTearOff_h
+#define SVGStaticPropertyWithParentTearOff_h
+
+#if ENABLE(SVG)
+#include "SVGPropertyTearOff.h"
+
+namespace WebCore {
+
+#if COMPILER(MSVC)
+// UpdateMethod is 12 bytes. We have to pack to a size greater than or equal to that to avoid an
+// alignment warning (C4121). 16 is the next-largest size allowed for packing, so we use that.
+#pragma pack(push, 16)
+#endif
+template<typename ParentType, typename PropertyType>
+class SVGStaticPropertyWithParentTearOff : public SVGPropertyTearOff<PropertyType> {
+public:
+    typedef SVGStaticPropertyWithParentTearOff<ParentType, PropertyType> Self;
+    typedef void (ParentType::*UpdateMethod)();
+
+    // Used for non-animated POD types that are not associated with a SVGAnimatedProperty object, nor with a XML DOM attribute
+    // and that contain a parent type that's exposed to the bindings via a SVGStaticPropertyTearOff object
+    // (for example: SVGTransform::matrix).
+    static PassRefPtr<Self> create(SVGProperty* parent, PropertyType& value, UpdateMethod update)
+    {
+        ASSERT(parent);
+        return adoptRef(new Self(parent, value, update));
+    }
+
+    virtual void commitChange()
+    {
+        (static_cast<SVGPropertyTearOff<ParentType>*>(m_parent.get())->propertyReference().*m_update)();
+        m_parent->commitChange();
+    }
+
+private:
+    SVGStaticPropertyWithParentTearOff(SVGProperty* parent, PropertyType& value, UpdateMethod update)
+        : SVGPropertyTearOff<PropertyType>(0, value)
+        , m_update(update)
+        , m_parent(parent)
+    {
+    }
+
+    UpdateMethod m_update;
+    RefPtr<SVGProperty> m_parent;
+};
+#if COMPILER(MSVC)
+#pragma pack(pop)
+#endif
+
+}
+
+#endif // ENABLE(SVG)
+#endif // SVGStaticPropertyWithParentTearOff_h
diff --git a/WebCore/svg/properties/SVGTransformListPropertyTearOff.h b/WebCore/svg/properties/SVGTransformListPropertyTearOff.h
new file mode 100644
index 0000000..636871a
--- /dev/null
+++ b/WebCore/svg/properties/SVGTransformListPropertyTearOff.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SVGTransformListPropertyTearOff_h
+#define SVGTransformListPropertyTearOff_h
+
+#if ENABLE(SVG)
+#include "SVGListPropertyTearOff.h"
+
+namespace WebCore {
+
+// SVGTransformList contains two additional methods, that can be exposed to the bindings.
+class SVGTransformListPropertyTearOff : public SVGListPropertyTearOff<SVGTransformList> {
+public:
+    typedef SVGAnimatedListPropertyTearOff<SVGTransformList> AnimatedListPropertyTearOff;
+    typedef SVGAnimatedListPropertyTearOff<SVGTransformList>::ListWrapperCache ListWrapperCache;
+
+    static PassRefPtr<SVGListPropertyTearOff<SVGTransformList> > create(AnimatedListPropertyTearOff* animatedProperty, SVGPropertyRole role)
+    {
+        ASSERT(animatedProperty);
+        return adoptRef(new SVGTransformListPropertyTearOff(animatedProperty, role));
+    }
+
+    PassRefPtr<SVGPropertyTearOff<SVGTransform> > createSVGTransformFromMatrix(SVGPropertyTearOff<SVGMatrix>* matrix)
+    {
+        ASSERT(matrix);
+        SVGTransformList& values = m_animatedProperty->values();
+        return SVGPropertyTearOff<SVGTransform>::create(values.createSVGTransformFromMatrix(matrix->propertyReference()));
+    }
+
+    PassRefPtr<SVGPropertyTearOff<SVGTransform> > consolidate(ExceptionCode& ec)
+    {
+        if (!canAlterList(ec))
+            return 0;
+
+        SVGTransformList& values = m_animatedProperty->values();
+        ListWrapperCache& wrappers = m_animatedProperty->wrappers();
+        ASSERT(values.size() == wrappers.size());
+
+        m_animatedProperty->detachListWrappers(0);
+        RefPtr<SVGPropertyTearOff<SVGTransform> > wrapper = SVGPropertyTearOff<SVGTransform>::create(values.consolidate());
+        wrappers.append(wrapper);
+
+        ASSERT(values.size() == wrappers.size());
+        return wrapper.release();
+    }
+
+private:
+    SVGTransformListPropertyTearOff(AnimatedListPropertyTearOff* animatedProperty, SVGPropertyRole role)
+        : SVGListPropertyTearOff<SVGTransformList>(animatedProperty, role)
+    {
+    }
+
+};
+
+}
+
+#endif // ENABLE(SVG)
+#endif // SVGListPropertyTearOff_h

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list