[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:26:04 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 8c91b83cf7210c48f80e256d3e8c1ed414883b47
Author: zimmermann at webkit.org <zimmermann at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Nov 3 11:13:10 2010 +0000

    2010-11-03  Nikolas Zimmermann  <nzimmermann at rim.com>
    
            Reviewed by Dirk Schulze.
    
            Convert SVGAnimatedString/SVGStringList to the new SVG*PropertyTearOff concept
            https://bugs.webkit.org/show_bug.cgi?id=48898
    
            Convert SVGAnimatedString/SVGStringList to the new svg animated type concept.
            SVGStringList is special compared to all other SVG*Lists, as it returns non-live elements.
            That means myStringList.getItem(0) = 'foobar' doesn't take effect.
    
            When appending an item to a SVGStringList, that has been taken from another list, it's not removed from the list origin.
            That demanded a new SVGStringListPropertyTearOff which does just that.
    
            Tests: svg/W3C-SVG-1.1-SE/types-dom-06-f.svg
                   svg/dom/SVGStringList.html
    
            * GNUmakefile.am: Add SVGAnimatedString.h / SVGStringListPropertyTearOff.h to build.
            * WebCore.gypi: Ditto.
            * WebCore.pro: Ditto.
            * WebCore.vcproj/WebCore.vcproj: Ditto.
            * WebCore.xcodeproj/project.pbxproj: Ditto.
            * bindings/scripts/CodeGenerator.pm: Recognize SVGAnimatedString as new style svg animated type. Map SVGStringList to SVGStringListPropertyTearOff.
            * bindings/scripts/CodeGeneratorJS.pm: Handle SVGStringListPropertyTearOff in GetSVGPropertyTypes.
            * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
            * bindings/scripts/CodeGeneratorV8.pm: Ditto.
            * svg/DeprecatedSVGAnimatedPropertyTraits.h: Remove SVGAnimatedString handling.
            * svg/DeprecatedSVGAnimatedTemplate.h: Ditto.
            * svg/SVGAElement.cpp: Renamed target to svgTarget() to avoid clashes with Element::target(), adjust the bindings to call svgTarget() instead of target(), when processing SVGAElement.
            (WebCore::SVGAElement::parseMappedAttribute):
            (WebCore::SVGAElement::synchronizeProperty):
            * svg/SVGAElement.h:
            * svg/SVGAltGlyphElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARED_ANIMATED_STATIC_PROPERTY_NEW/
            * svg/SVGAnimatedString.h: Added.
            * svg/SVGCursorElement.h: Ditto.
            * svg/SVGFEBlendElement.h: Ditto.
            * svg/SVGFEColorMatrixElement.h: Ditto.
            * svg/SVGFEComponentTransferElement.h: Ditto.
            * svg/SVGFECompositeElement.h: Ditto.
            * svg/SVGFEConvolveMatrixElement.h: Ditto.
            * svg/SVGFEDiffuseLightingElement.h: Ditto.
            * svg/SVGFEDisplacementMapElement.h: Ditto.
            * svg/SVGFEGaussianBlurElement.h: Ditto.
            * svg/SVGFEImageElement.h: Ditto.
            * svg/SVGFEMergeNodeElement.h: Ditto.
            * svg/SVGFEMorphologyElement.h: Ditto.
            * svg/SVGFEOffsetElement.h: Ditto.
            * svg/SVGFESpecularLightingElement.h: Ditto.
            * svg/SVGFETileElement.h: Ditto.
            * svg/SVGFilterElement.h: Ditto.
            * svg/SVGFilterPrimitiveStandardAttributes.h: Ditto.
            * svg/SVGForeignObjectElement.h: Ditto.
            * svg/SVGGradientElement.h: Ditto.
            * svg/SVGImageElement.h: Ditto.
            * svg/SVGLengthList.idl: Remove leftover SVGListProperty marker.
            * svg/SVGMPathElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARED_ANIMATED_STATIC_PROPERTY_NEW/
            * svg/SVGPatternElement.h: Ditto.
            * svg/SVGScriptElement.h: Ditto.
            * svg/SVGStringList.cpp: Make SVGStringList a plain Vector<String>.
            (WebCore::SVGStringList::commitChange): React to SVGStringList changes.
            (WebCore::SVGStringList::reset):
            (WebCore::SVGStringList::parse):
            * svg/SVGStringList.h:
            (WebCore::SVGStringList::SVGStringList):
            * svg/SVGStyledElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARED_ANIMATED_STATIC_PROPERTY_NEW/
            * svg/SVGTRefElement.h: Ditto.
            * svg/SVGTests.cpp: Adapt to SVGStringList API changes.
            (WebCore::SVGTests::SVGTests):
            (WebCore::SVGTests::hasExtension):
            (WebCore::SVGTests::isValid):
            (WebCore::SVGTests::parseMappedAttribute):
            (WebCore::SVGTests::isKnownAttribute):
            * svg/SVGTests.h: Ditto.
            (WebCore::SVGTests::requiredFeatures):
            (WebCore::SVGTests::requiredExtensions):
            (WebCore::SVGTests::systemLanguage):
            * svg/SVGTextPathElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARED_ANIMATED_STATIC_PROPERTY_NEW/
            * svg/SVGURIReference.h: Adapt to SVGStringList API changes.
            (WebCore::SVGURIReference::~SVGURIReference):
            * svg/SVGUseElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARED_ANIMATED_STATIC_PROPERTY_NEW/
            * svg/SVGViewElement.cpp: Adapt to SVGStringList API changes.
            (WebCore::SVGViewElement::SVGViewElement):
            (WebCore::SVGViewElement::parseMappedAttribute):
            * svg/SVGViewElement.h: Ditto.
            (WebCore::SVGViewElement::viewTarget):
            * svg/properties/SVGAnimatedPropertyMacros.h: Moved GetOwnerElementForType heleprs from SVGAnimatedPropertySynchronizer into this file.
            * svg/properties/SVGAnimatedPropertySynchronizer.h:
            * svg/properties/SVGPropertyTraits.h: Handle SVGStringList.
            * svg/properties/SVGStringListPropertyTearOff.h: Added. This is a simplified version of SVGListPropertyTearOff, tied to SVGStringList and its special demands.
            (WebCore::SVGStringListPropertyTearOff::create):
            (WebCore::SVGStringListPropertyTearOff::clear):
            (WebCore::SVGStringListPropertyTearOff::numberOfItems):
            (WebCore::SVGStringListPropertyTearOff::initialize):
            (WebCore::SVGStringListPropertyTearOff::getItem):
            (WebCore::SVGStringListPropertyTearOff::insertItemBefore):
            (WebCore::SVGStringListPropertyTearOff::replaceItem):
            (WebCore::SVGStringListPropertyTearOff::removeItem):
            (WebCore::SVGStringListPropertyTearOff::appendItem):
            (WebCore::SVGStringListPropertyTearOff::SVGStringListPropertyTearOff):
    
    2010-11-03  Nikolas Zimmermann  <nzimmermann at rim.com>
    
            Reviewed by Dirk Schulze.
    
            Convert SVGAnimatedString/SVGStringList to the new SVG*PropertyTearOff concept
            https://bugs.webkit.org/show_bug.cgi?id=48898
    
            Add a new SVGStringList test ensuring that the items returned by getItem etc. are not live (it's a plain DOMString).
            Add a new test from SVG 1.1 2nd edition regarding SVGStringList. The list operations all pass, but because of a bug
            in SVGTests requiredFeatures handling (see bug 40887) there's still one red rectangle in the middle.
    
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.checksum: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.png: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.txt: Added.
            * svg/W3C-SVG-1.1-SE/types-dom-06-f.svg: Added.
            * svg/dom/SVGStringList-expected.txt: Added.
            * svg/dom/SVGStringList.html: Added.
            * svg/dom/script-tests/SVGStringList.js: Added.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71227 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 5d7416d..8282244 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,22 @@
+2010-11-03  Nikolas Zimmermann  <nzimmermann at rim.com>
+
+        Reviewed by Dirk Schulze.
+
+        Convert SVGAnimatedString/SVGStringList to the new SVG*PropertyTearOff concept
+        https://bugs.webkit.org/show_bug.cgi?id=48898
+
+        Add a new SVGStringList test ensuring that the items returned by getItem etc. are not live (it's a plain DOMString).
+        Add a new test from SVG 1.1 2nd edition regarding SVGStringList. The list operations all pass, but because of a bug
+        in SVGTests requiredFeatures handling (see bug 40887) there's still one red rectangle in the middle.
+
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.checksum: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.png: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.txt: Added.
+        * svg/W3C-SVG-1.1-SE/types-dom-06-f.svg: Added.
+        * svg/dom/SVGStringList-expected.txt: Added.
+        * svg/dom/SVGStringList.html: Added.
+        * svg/dom/script-tests/SVGStringList.js: Added.
+
 2010-11-03  Daniel Bates  <dbates at rim.com>
 
         Rubber-stamped by Nikolas Zimmermann.
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.checksum b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.checksum
new file mode 100644
index 0000000..a6a479e
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.checksum
@@ -0,0 +1 @@
+75067bde302796fc224de015777d773d
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.png b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.png
new file mode 100644
index 0000000..d760119
Binary files /dev/null and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.txt
new file mode 100644
index 0000000..0e0cd3e
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/types-dom-06-f-expected.txt
@@ -0,0 +1,22 @@
+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 (0,0) size 480x360
+      RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+      RenderSVGText {text} at (160,53) size 160x21 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 160x21
+          chunk 1 (middle anchor) text run 1 at (160.00,70.00) startOffset 0 endOffset 17 width 160.00: "SVGStringList DOM"
+      RenderSVGContainer {g} at (80,100) size 320x100
+        RenderSVGPath {rect} at (80,100) size 100x100 [transform={m=((1.00,0.00)(0.00,1.00)) t=(80.00,100.00)}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
+        RenderSVGPath {rect} at (190,100) size 100x100 [transform={m=((1.00,0.00)(0.00,1.00)) t=(190.00,100.00)}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
+        RenderSVGPath {rect} at (300,100) size 100x100 [transform={m=((1.00,0.00)(0.00,1.00)) t=(300.00,100.00)}] [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
+      RenderSVGPath {rect} at (190,100) size 100x100 [transform={m=((1.00,0.00)(0.00,1.00)) t=(190.00,100.00)}] [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
+      RenderSVGPath {rect} at (300,100) size 100x100 [transform={m=((1.00,0.00)(0.00,1.00)) t=(300.00,100.00)}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
+      RenderSVGPath {rect} at (0,0) size 480x360 [x=0.00] [y=0.00] [width=480.00] [height=360.00]
+    RenderSVGContainer {g} at (10,310) size 231x37
+      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/svg/W3C-SVG-1.1-SE/types-dom-06-f.svg b/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-06-f.svg
new file mode 100644
index 0000000..de6a4c3
--- /dev/null
+++ b/LayoutTests/svg/W3C-SVG-1.1-SE/types-dom-06-f.svg
@@ -0,0 +1,133 @@
+<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="runtest()">
+  <!--======================================================================-->
+  <!--=  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.5 $" testname="$RCSfile: types-dom-06-f.svg,v $">
+    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/types.html#InterfaceSVGStringList">
+      <p>
+        This tests parts of the SVGStringList interface. Particularly it tests that
+        strings that are taken from one SVGStringList and then inserted into another
+        SVGStringList duplicates the value instead of removing the value from the
+        first list when it's inserted into the second list.
+      </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>
+        
+      </p>
+      <p>
+        The test has passed if there are three green rectangles visible and no red. Red is an indication that the test failed.
+      </p>
+    </d:passCriteria>
+  </d:SVGTestCase>
+  <title id="test-title">$RCSfile: types-dom-06-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>
+			<script type="application/ecmascript">
+				function runtest()
+				{
+					try {
+						var r1 = document.getElementById("r1");
+						var r2 = document.getElementById("r2");
+						var r3 = document.getElementById("r3");
+						var i0 = r1.requiredFeatures.getItem(0);
+						var i1 = r1.requiredFeatures.getItem(1);
+						
+						if(i0 != "http://www.w3.org/TR/SVG11/feature#Shape")
+						{
+							r1.removeAttribute("requiredFeatures");
+							return;
+						}
+						if(i1 != "this.is.a.bogus.feature.string")
+						{
+							r1.removeAttribute("requiredFeatures");
+							return;
+						}
+						if(r1.requiredFeatures.numberOfItems != 2)
+						{
+							r1.removeAttribute("requiredFeatures");
+							return;
+						}
+						r2.requiredFeatures.appendItem(i1);
+						if(r1.requiredFeatures.numberOfItems != 2)
+						{
+							r1.removeAttribute("requiredFeatures");
+							return;
+						}
+						if(r2.requiredFeatures.numberOfItems != 1)
+						{
+							r1.removeAttribute("requiredFeatures");
+							return;
+						}
+						r3.requiredFeatures.insertItemBefore(i0,0);
+						if(r3.requiredFeatures.numberOfItems != 2)
+						{
+							r3.setAttribute("fill", "red");
+							return;
+						}
+						if(r1.requiredFeatures.numberOfItems != 2)
+						{
+							r1.removeAttribute("requiredFeatures");
+							return;
+						}
+					}
+					catch(e)
+					{
+						var f = document.getElementById("fail");
+						f.setAttribute("fill", "red");
+					}				
+				}
+			</script>
+		</defs>
+		
+		<text x="50%" y="70" text-anchor="middle">SVGStringList DOM</text>
+		
+		<!-- background images -->
+		<g>
+			<rect width="100" height="100" fill="lime" transform="translate(80 100)"/>
+			<rect width="100" height="100" fill="lime" transform="translate(190 100)"/>
+			<rect width="100" height="100" fill="red" transform="translate(300 100)"/>
+		</g>
+		
+		<!-- tests -->
+		<rect id="r1" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Shape this.is.a.bogus.feature.string" width="100" height="100" fill="red" transform="translate(100 100)"/>
+		<rect id="r2" width="100" height="100" fill="red" transform="translate(190 100)"/>
+		<rect id="r3" width="100" height="100" fill="lime" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Shape" transform="translate(300 100)"/>
+		
+		<rect id="fail" width="100%" height="100%" fill="none"/>
+  </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/dom/SVGStringList-expected.txt b/LayoutTests/svg/dom/SVGStringList-expected.txt
new file mode 100644
index 0000000..cb4683f
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGStringList-expected.txt
@@ -0,0 +1,20 @@
+This test checks the SVGStringList API - utilizing the requiredFeatures property of SVGRectElement
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Check initial requiredFeatures values
+PASS rect.requiredFeatures.numberOfItems is 2
+PASS rect.requiredFeatures.getItem(0) is "foo"
+PASS rect.requiredFeatures.getItem(1) is "bar"
+
+Check that getItem() does NOT return live strings, as the IDL defines the return types as plain DOMString
+PASS firstItem = 'test' is "test"
+PASS rect.requiredFeatures.numberOfItems is 2
+PASS rect.requiredFeatures.getItem(0) is "foo"
+PASS rect.requiredFeatures.getItem(1) is "bar"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dom/SVGStringList.html b/LayoutTests/svg/dom/SVGStringList.html
new file mode 100644
index 0000000..1f3dc22
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGStringList.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/SVGStringList.js"></script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dom/script-tests/SVGStringList.js b/LayoutTests/svg/dom/script-tests/SVGStringList.js
new file mode 100644
index 0000000..36e5694
--- /dev/null
+++ b/LayoutTests/svg/dom/script-tests/SVGStringList.js
@@ -0,0 +1,21 @@
+description("This test checks the SVGStringList API - utilizing the requiredFeatures property of SVGRectElement");
+
+var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
+var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
+rect.setAttribute("requiredFeatures", "foo bar");
+
+debug("");
+debug("Check initial requiredFeatures values");
+shouldBe("rect.requiredFeatures.numberOfItems", "2");
+shouldBeEqualToString("rect.requiredFeatures.getItem(0)", "foo");
+shouldBeEqualToString("rect.requiredFeatures.getItem(1)", "bar");
+
+debug("");
+debug("Check that getItem() does NOT return live strings, as the IDL defines the return types as plain DOMString");
+var firstItem = rect.requiredFeatures.getItem(0);
+shouldBeEqualToString("firstItem = 'test'", "test");
+shouldBe("rect.requiredFeatures.numberOfItems", "2");
+shouldBeEqualToString("rect.requiredFeatures.getItem(0)", "foo");
+shouldBeEqualToString("rect.requiredFeatures.getItem(1)", "bar");
+
+successfullyParsed = true;
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index d30ca7c..d26423a 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,103 @@
+2010-11-03  Nikolas Zimmermann  <nzimmermann at rim.com>
+
+        Reviewed by Dirk Schulze.
+
+        Convert SVGAnimatedString/SVGStringList to the new SVG*PropertyTearOff concept
+        https://bugs.webkit.org/show_bug.cgi?id=48898
+
+        Convert SVGAnimatedString/SVGStringList to the new svg animated type concept.
+        SVGStringList is special compared to all other SVG*Lists, as it returns non-live elements.
+        That means myStringList.getItem(0) = 'foobar' doesn't take effect.
+
+        When appending an item to a SVGStringList, that has been taken from another list, it's not removed from the list origin.
+        That demanded a new SVGStringListPropertyTearOff which does just that.
+
+        Tests: svg/W3C-SVG-1.1-SE/types-dom-06-f.svg
+               svg/dom/SVGStringList.html
+
+        * GNUmakefile.am: Add SVGAnimatedString.h / SVGStringListPropertyTearOff.h to build.
+        * WebCore.gypi: Ditto.
+        * WebCore.pro: Ditto.
+        * WebCore.vcproj/WebCore.vcproj: Ditto.
+        * WebCore.xcodeproj/project.pbxproj: Ditto.
+        * bindings/scripts/CodeGenerator.pm: Recognize SVGAnimatedString as new style svg animated type. Map SVGStringList to SVGStringListPropertyTearOff.
+        * bindings/scripts/CodeGeneratorJS.pm: Handle SVGStringListPropertyTearOff in GetSVGPropertyTypes.
+        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
+        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
+        * svg/DeprecatedSVGAnimatedPropertyTraits.h: Remove SVGAnimatedString handling.
+        * svg/DeprecatedSVGAnimatedTemplate.h: Ditto.
+        * svg/SVGAElement.cpp: Renamed target to svgTarget() to avoid clashes with Element::target(), adjust the bindings to call svgTarget() instead of target(), when processing SVGAElement.
+        (WebCore::SVGAElement::parseMappedAttribute):
+        (WebCore::SVGAElement::synchronizeProperty):
+        * svg/SVGAElement.h:
+        * svg/SVGAltGlyphElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARED_ANIMATED_STATIC_PROPERTY_NEW/
+        * svg/SVGAnimatedString.h: Added.
+        * svg/SVGCursorElement.h: Ditto.
+        * svg/SVGFEBlendElement.h: Ditto.
+        * svg/SVGFEColorMatrixElement.h: Ditto.
+        * svg/SVGFEComponentTransferElement.h: Ditto.
+        * svg/SVGFECompositeElement.h: Ditto.
+        * svg/SVGFEConvolveMatrixElement.h: Ditto.
+        * svg/SVGFEDiffuseLightingElement.h: Ditto.
+        * svg/SVGFEDisplacementMapElement.h: Ditto.
+        * svg/SVGFEGaussianBlurElement.h: Ditto.
+        * svg/SVGFEImageElement.h: Ditto.
+        * svg/SVGFEMergeNodeElement.h: Ditto.
+        * svg/SVGFEMorphologyElement.h: Ditto.
+        * svg/SVGFEOffsetElement.h: Ditto.
+        * svg/SVGFESpecularLightingElement.h: Ditto.
+        * svg/SVGFETileElement.h: Ditto.
+        * svg/SVGFilterElement.h: Ditto.
+        * svg/SVGFilterPrimitiveStandardAttributes.h: Ditto.
+        * svg/SVGForeignObjectElement.h: Ditto.
+        * svg/SVGGradientElement.h: Ditto.
+        * svg/SVGImageElement.h: Ditto. 
+        * svg/SVGLengthList.idl: Remove leftover SVGListProperty marker.
+        * svg/SVGMPathElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARED_ANIMATED_STATIC_PROPERTY_NEW/
+        * svg/SVGPatternElement.h: Ditto.
+        * svg/SVGScriptElement.h: Ditto.
+        * svg/SVGStringList.cpp: Make SVGStringList a plain Vector<String>.
+        (WebCore::SVGStringList::commitChange): React to SVGStringList changes.
+        (WebCore::SVGStringList::reset):
+        (WebCore::SVGStringList::parse):
+        * svg/SVGStringList.h:
+        (WebCore::SVGStringList::SVGStringList):
+        * svg/SVGStyledElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARED_ANIMATED_STATIC_PROPERTY_NEW/
+        * svg/SVGTRefElement.h: Ditto.
+        * svg/SVGTests.cpp: Adapt to SVGStringList API changes.
+        (WebCore::SVGTests::SVGTests):
+        (WebCore::SVGTests::hasExtension):
+        (WebCore::SVGTests::isValid):
+        (WebCore::SVGTests::parseMappedAttribute):
+        (WebCore::SVGTests::isKnownAttribute):
+        * svg/SVGTests.h: Ditto.
+        (WebCore::SVGTests::requiredFeatures):
+        (WebCore::SVGTests::requiredExtensions):
+        (WebCore::SVGTests::systemLanguage):
+        * svg/SVGTextPathElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARED_ANIMATED_STATIC_PROPERTY_NEW/
+        * svg/SVGURIReference.h: Adapt to SVGStringList API changes.
+        (WebCore::SVGURIReference::~SVGURIReference):
+        * svg/SVGUseElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARED_ANIMATED_STATIC_PROPERTY_NEW/
+        * svg/SVGViewElement.cpp: Adapt to SVGStringList API changes.
+        (WebCore::SVGViewElement::SVGViewElement):
+        (WebCore::SVGViewElement::parseMappedAttribute):
+        * svg/SVGViewElement.h: Ditto.
+        (WebCore::SVGViewElement::viewTarget):
+        * svg/properties/SVGAnimatedPropertyMacros.h: Moved GetOwnerElementForType heleprs from SVGAnimatedPropertySynchronizer into this file.
+        * svg/properties/SVGAnimatedPropertySynchronizer.h: 
+        * svg/properties/SVGPropertyTraits.h: Handle SVGStringList.
+        * svg/properties/SVGStringListPropertyTearOff.h: Added. This is a simplified version of SVGListPropertyTearOff, tied to SVGStringList and its special demands.
+        (WebCore::SVGStringListPropertyTearOff::create):
+        (WebCore::SVGStringListPropertyTearOff::clear):
+        (WebCore::SVGStringListPropertyTearOff::numberOfItems):
+        (WebCore::SVGStringListPropertyTearOff::initialize):
+        (WebCore::SVGStringListPropertyTearOff::getItem):
+        (WebCore::SVGStringListPropertyTearOff::insertItemBefore):
+        (WebCore::SVGStringListPropertyTearOff::replaceItem):
+        (WebCore::SVGStringListPropertyTearOff::removeItem):
+        (WebCore::SVGStringListPropertyTearOff::appendItem):
+        (WebCore::SVGStringListPropertyTearOff::SVGStringListPropertyTearOff):
+
 2010-11-03  Zoltan Herczeg  <zherczeg at webkit.org>
 
         Reviewed by Dirk Schulze.
diff --git a/WebCore/GNUmakefile.am b/WebCore/GNUmakefile.am
index 16bdaec..c4f927f 100644
--- a/WebCore/GNUmakefile.am
+++ b/WebCore/GNUmakefile.am
@@ -3038,6 +3038,7 @@ webcore_sources += \
 	WebCore/svg/properties/SVGProperty.h \
 	WebCore/svg/properties/SVGPropertyTearOff.h \
 	WebCore/svg/properties/SVGPropertyTraits.h \
+	WebCore/svg/properties/SVGStringListPropertyTearOff.h \
 	WebCore/svg/RadialGradientAttributes.h \
 	WebCore/svg/SVGAElement.cpp \
 	WebCore/svg/SVGAElement.h \
@@ -3061,6 +3062,7 @@ webcore_sources += \
 	WebCore/svg/SVGAnimatedPoints.h \
 	WebCore/svg/SVGAnimatedPreserveAspectRatio.h \
 	WebCore/svg/SVGAnimatedRect.h \
+	WebCore/svg/SVGAnimatedString.h \
 	WebCore/svg/SVGAnimateElement.cpp \
 	WebCore/svg/SVGAnimateElement.h \
 	WebCore/svg/SVGAnimateMotionElement.cpp \
diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
index e7ff438..d2c8695 100644
--- a/WebCore/WebCore.gypi
+++ b/WebCore/WebCore.gypi
@@ -3957,6 +3957,7 @@
             'svg/properties/SVGProperty.h',
             'svg/properties/SVGPropertyTearOff.h',
             'svg/properties/SVGPropertyTraits.h',
+            'svg/properties/SVGStringListPropertyTearOff.h',
             'svg/ColorDistance.cpp',
             'svg/ColorDistance.h',
             'svg/DeprecatedSVGAnimatedProperty.h',
@@ -3996,6 +3997,7 @@
             'svg/SVGAnimatedPoints.h',
             'svg/SVGAnimatedPreserveAspectRatio.h',
             'svg/SVGAnimatedRect.h',
+            'svg/SVGAnimatedString.h',
             'svg/SVGAnimationElement.cpp',
             'svg/SVGAnimationElement.h',
             'svg/SVGCircleElement.cpp',
diff --git a/WebCore/WebCore.pro b/WebCore/WebCore.pro
index c028a26..6f5f86a 100644
--- a/WebCore/WebCore.pro
+++ b/WebCore/WebCore.pro
@@ -2367,6 +2367,7 @@ HEADERS += \
     svg/properties/SVGProperty.h \
     svg/properties/SVGPropertyTearOff.h \
     svg/properties/SVGPropertyTraits.h \
+    svg/properties/SVGStringListPropertyTearOff.h \
     svg/SVGAElement.h \
     svg/SVGAltGlyphElement.h \
     svg/SVGAngle.h \
@@ -2383,6 +2384,7 @@ HEADERS += \
     svg/SVGAnimatedPoints.h \
     svg/SVGAnimatedPreserveAspectRatio.h \
     svg/SVGAnimatedRect.h \
+    svg/SVGAnimatedString.h \
     svg/SVGAnimateElement.h \
     svg/SVGAnimateMotionElement.h \
     svg/SVGAnimateTransformElement.h \
diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj
index efe3559..d6928d8 100644
--- a/WebCore/WebCore.vcproj/WebCore.vcproj
+++ b/WebCore/WebCore.vcproj/WebCore.vcproj
@@ -61672,6 +61672,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\svg\SVGAnimatedString.h"
+				>
+			</File>
+			<File
 				RelativePath="..\svg\SVGAnimateElement.h"
 				>
 			</File>
@@ -62734,6 +62738,10 @@
 					RelativePath="..\svg\properties\SVGPropertyTraits.h"
 					>
 				</File>
+				<File
+					RelativePath="..\svg\properties\SVGStringListPropertyTearOff.h"
+					>
+				</File>
 			</Filter>
 		</Filter>
 		<Filter
diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
index 0bc0fa6..3a5c495 100644
--- a/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -113,6 +113,7 @@
 		084D0E3D11F5816100081E1A /* SVGResources.h in Headers */ = {isa = PBXBuildFile; fileRef = 084D0E3911F5816100081E1A /* SVGResources.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		084D0E3E11F5816100081E1A /* SVGResourcesCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 084D0E3A11F5816100081E1A /* SVGResourcesCache.cpp */; };
 		084D0E3F11F5816100081E1A /* SVGResourcesCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 084D0E3B11F5816100081E1A /* SVGResourcesCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		084DB59B128008CC002A6D64 /* SVGAnimatedString.h in Headers */ = {isa = PBXBuildFile; fileRef = 084DB59A128008CC002A6D64 /* SVGAnimatedString.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		084DBAA10ED39D360038C226 /* WMLVariables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 084DBA9D0ED39D350038C226 /* WMLVariables.cpp */; };
 		084DBAA20ED39D360038C226 /* WMLVariables.h in Headers */ = {isa = PBXBuildFile; fileRef = 084DBA9E0ED39D360038C226 /* WMLVariables.h */; };
 		08525E631278C00100A84778 /* SVGAnimatedStaticPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 08525E621278C00100A84778 /* SVGAnimatedStaticPropertyTearOff.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -243,6 +244,7 @@
 		08E192530EDE0C3A0087B780 /* WMLErrorHandling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08E192510EDE0C390087B780 /* WMLErrorHandling.cpp */; };
 		08E192540EDE0C3A0087B780 /* WMLErrorHandling.h in Headers */ = {isa = PBXBuildFile; fileRef = 08E192520EDE0C3A0087B780 /* WMLErrorHandling.h */; };
 		08E4FE460E2BD41400F4CAE0 /* JSSVGLengthCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08E4FE450E2BD41400F4CAE0 /* JSSVGLengthCustom.cpp */; };
+		08E58FF512801CF70045903D /* SVGStringListPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 08E58FF412801CF70045903D /* SVGStringListPropertyTearOff.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		08E6A2E80EEE035200AC1206 /* WMLPostfieldElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08E6A2E60EEE035200AC1206 /* WMLPostfieldElement.cpp */; };
 		08E6A2E90EEE035200AC1206 /* WMLPostfieldElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 08E6A2E70EEE035200AC1206 /* WMLPostfieldElement.h */; };
 		08E6E0F10EFF42BA00029FBF /* WMLFieldSetElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08E6E0EF0EFF42BA00029FBF /* WMLFieldSetElement.cpp */; };
@@ -6136,6 +6138,7 @@
 		084D0E3911F5816100081E1A /* SVGResources.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGResources.h; sourceTree = "<group>"; };
 		084D0E3A11F5816100081E1A /* SVGResourcesCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGResourcesCache.cpp; sourceTree = "<group>"; };
 		084D0E3B11F5816100081E1A /* SVGResourcesCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGResourcesCache.h; sourceTree = "<group>"; };
+		084DB59A128008CC002A6D64 /* SVGAnimatedString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedString.h; sourceTree = "<group>"; };
 		084DBA9D0ED39D350038C226 /* WMLVariables.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLVariables.cpp; sourceTree = "<group>"; };
 		084DBA9E0ED39D360038C226 /* WMLVariables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLVariables.h; sourceTree = "<group>"; };
 		08525E621278C00100A84778 /* SVGAnimatedStaticPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedStaticPropertyTearOff.h; sourceTree = "<group>"; };
@@ -6253,6 +6256,7 @@
 		08E192510EDE0C390087B780 /* WMLErrorHandling.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLErrorHandling.cpp; sourceTree = "<group>"; };
 		08E192520EDE0C3A0087B780 /* WMLErrorHandling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLErrorHandling.h; sourceTree = "<group>"; };
 		08E4FE450E2BD41400F4CAE0 /* JSSVGLengthCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGLengthCustom.cpp; sourceTree = "<group>"; };
+		08E58FF412801CF70045903D /* SVGStringListPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGStringListPropertyTearOff.h; sourceTree = "<group>"; };
 		08E6A2E60EEE035200AC1206 /* WMLPostfieldElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLPostfieldElement.cpp; sourceTree = "<group>"; };
 		08E6A2E70EEE035200AC1206 /* WMLPostfieldElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLPostfieldElement.h; sourceTree = "<group>"; };
 		08E6E0EF0EFF42BA00029FBF /* WMLFieldSetElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLFieldSetElement.cpp; sourceTree = "<group>"; };
@@ -11754,6 +11758,7 @@
 				088A0E01126EF1DB00978F7A /* SVGProperty.h */,
 				088A0E02126EF1DB00978F7A /* SVGPropertyTearOff.h */,
 				088A0E03126EF1DB00978F7A /* SVGPropertyTraits.h */,
+				08E58FF412801CF70045903D /* SVGStringListPropertyTearOff.h */,
 			);
 			path = properties;
 			sourceTree = "<group>";
@@ -16034,6 +16039,7 @@
 				B22277F40D00BF1F0071B782 /* SVGAnimatedPreserveAspectRatio.idl */,
 				08C859BF1274575300A5728D /* SVGAnimatedRect.h */,
 				B22277F50D00BF1F0071B782 /* SVGAnimatedRect.idl */,
+				084DB59A128008CC002A6D64 /* SVGAnimatedString.h */,
 				B22277F60D00BF1F0071B782 /* SVGAnimatedString.idl */,
 				B22277F80D00BF1F0071B782 /* SVGAnimatedTransformList.idl */,
 				B22277F90D00BF1F0071B782 /* SVGAnimateElement.cpp */,
@@ -20830,6 +20836,7 @@
 				088A0E08126EF1DB00978F7A /* SVGAnimatedPropertyTearOff.h in Headers */,
 				08C859C01274575400A5728D /* SVGAnimatedRect.h in Headers */,
 				08525E631278C00100A84778 /* SVGAnimatedStaticPropertyTearOff.h in Headers */,
+				084DB59B128008CC002A6D64 /* SVGAnimatedString.h in Headers */,
 				B22279900D00BF220071B782 /* SVGAnimateElement.h in Headers */,
 				B22279930D00BF220071B782 /* SVGAnimateMotionElement.h in Headers */,
 				B22279950D00BF220071B782 /* SVGAnimateTransformElement.h in Headers */,
@@ -20973,6 +20980,7 @@
 				E4AFD0100DAF335500F5F55C /* SVGSMILElement.h in Headers */,
 				B2227AA90D00BF220071B782 /* SVGStopElement.h in Headers */,
 				B2227AAC0D00BF220071B782 /* SVGStringList.h in Headers */,
+				08E58FF512801CF70045903D /* SVGStringListPropertyTearOff.h in Headers */,
 				B2227AAF0D00BF220071B782 /* SVGStylable.h in Headers */,
 				B2227AB20D00BF220071B782 /* SVGStyledElement.h in Headers */,
 				B2227AB40D00BF220071B782 /* SVGStyledLocatableElement.h in Headers */,
diff --git a/WebCore/bindings/scripts/CodeGenerator.pm b/WebCore/bindings/scripts/CodeGenerator.pm
index 834ca0d..641261b 100644
--- a/WebCore/bindings/scripts/CodeGenerator.pm
+++ b/WebCore/bindings/scripts/CodeGenerator.pm
@@ -60,7 +60,8 @@ my %svgNewStyleAnimatedTypeHash = ("SVGAnimatedAngle" => 1, "SVGAnimatedBoolean"
                                    "SVGAnimatedEnumeration" => 1, "SVGAnimatedInteger" => 1,
                                    "SVGAnimatedLength" => 1, "SVGAnimatedLengthList" => 1,
                                    "SVGAnimatedNumber" => 1, "SVGAnimatedNumberList" => 1,
-                                   "SVGAnimatedPreserveAspectRatio" => 1, "SVGAnimatedRect" => 1);
+                                   "SVGAnimatedPreserveAspectRatio" => 1, "SVGAnimatedRect" => 1,
+                                   "SVGAnimatedString" => 1);
 
 my %svgAnimatedTypeHash = ("SVGAnimatedAngle" => 1, "SVGAnimatedBoolean" => 1,
                            "SVGAnimatedEnumeration" => 1, "SVGAnimatedInteger" => 1,
@@ -83,7 +84,8 @@ my %svgNativeType = (
     "SVGNumber" => "SVGPropertyTearOff<float>",
     "SVGNumberList" => "SVGListPropertyTearOff<SVGNumberList>",
     "SVGPreserveAspectRatio" => "SVGPropertyTearOff<SVGPreserveAspectRatio>",
-    "SVGRect" => "SVGPropertyTearOff<FloatRect>"
+    "SVGRect" => "SVGPropertyTearOff<FloatRect>",
+    "SVGStringList" => "SVGStringListPropertyTearOff"
 );
 
 # Cache of IDL file pathnames.
@@ -480,13 +482,18 @@ sub AttributeNameForGetterAndSetter
     my ($generator, $attribute) = @_;
 
     my $attributeName = $attribute->signature->name;
+    my $attributeType = $generator->StripModule($attribute->signature->type);
 
     # Avoid clash with C++ keyword.
     $attributeName = "_operator" if $attributeName eq "operator";
 
+    # SVGAElement defines a non-virtual "String& target() const" method which clashes with "virtual String target() const" in Element.
+    # To solve this issue the SVGAElement method was renamed to "svgTarget", take care of that when calling this method.
+    $attributeName = "svgTarget" if $attributeName eq "target" and $attributeType eq "SVGAnimatedString";
+
     # SVG animated types need to use a special attribute name.
     # The rest of the special casing for SVG animated types is handled in the language-specific code generators.
-    $attributeName .= "Animated" if $generator->IsSVGAnimatedType($generator->StripModule($attribute->signature->type));
+    $attributeName .= "Animated" if $generator->IsSVGAnimatedType($attributeType);
 
     return $attributeName;
 }
diff --git a/WebCore/bindings/scripts/CodeGeneratorJS.pm b/WebCore/bindings/scripts/CodeGeneratorJS.pm
index 5e4a669..919bee9 100644
--- a/WebCore/bindings/scripts/CodeGeneratorJS.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorJS.pm
@@ -2506,6 +2506,9 @@ sub GetSVGPropertyTypes
         $svgListPropertyType = $svgWrappedNativeType;
         $headerIncludes{"$svgWrappedNativeType.h"} = 1;
         $headerIncludes{"SVGAnimatedListPropertyTearOff.h"} = 1;
+    } elsif ($svgNativeType =~ /SVGStringListPropertyTearOff/) {
+        $svgListPropertyType = "SVGStringList";
+        $headerIncludes{"$svgWrappedNativeType.h"} = 1;
     }
 
     return ($svgPropertyType, $svgListPropertyType, $svgNativeType);
@@ -2679,7 +2682,13 @@ sub NativeToJSValue
         # 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$/) {
-        $value = $codeGenerator->GetSVGTypeNeedingTearOff($type) . "::create($value)";
+        my $tearOffType = $codeGenerator->GetSVGTypeNeedingTearOff($type);
+        if ($tearOffType eq "SVGStringListPropertyTearOff") {
+            my $extraImp = "GetOwnerElementForType<$implClassName, IsDerivedFromSVGElement<$implClassName>::value>::ownerElement(imp), ";
+            $value = $codeGenerator->GetSVGTypeNeedingTearOff($type) . "::create($extraImp$value)";
+        } else {
+            $value = $codeGenerator->GetSVGTypeNeedingTearOff($type) . "::create($value)";
+        }
     }
 
     return "toJS(exec, $globalObject, WTF::getPtr($value))";
diff --git a/WebCore/bindings/scripts/CodeGeneratorObjC.pm b/WebCore/bindings/scripts/CodeGeneratorObjC.pm
index 3b6cdf8..eed8cf9 100644
--- a/WebCore/bindings/scripts/CodeGeneratorObjC.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorObjC.pm
@@ -690,6 +690,8 @@ sub GetSVGPropertyTypes
     } elsif ($svgNativeType =~ /SVGListPropertyTearOff/) {
         $svgListPropertyType = "WebCore::$svgWrappedNativeType";
         $svgListPropertyType =~ s/</\<WebCore::/;
+    } elsif ($svgNativeType =~ /SVGStringListPropertyTearOff/) {
+        $svgListPropertyType = "WebCore::SVGStringList";
     }
 
     return ($svgPropertyType, $svgListPropertyType, $svgNativeType);
@@ -1024,7 +1026,13 @@ sub GenerateHeader
 
         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) {
+            if ($svgListPropertyType eq "WebCore::SVGStringList") {
+                push(@internalHeaderContent, "#import <WebCore/SVGStringListPropertyTearOff.h>\n\n");
+            } else {
+                push(@internalHeaderContent, "#import <WebCore/SVGAnimatedListPropertyTearOff.h>\n\n");
+            }
+        }
         push(@internalHeaderContent, $interfaceAvailabilityVersionCheck) if length $interfaceAvailabilityVersion;
 
         if ($interfaceName eq "Node") {
@@ -1319,7 +1327,12 @@ sub GenerateImplementation
             } elsif (ConversionNeeded($attribute->signature->type)) {
                 if ($codeGenerator->IsSVGTypeNeedingTearOff($attribute->signature->type) and not $implClassName =~ /List$/) {
                     my $idlTypeWithNamespace = GetSVGTypeWithNamespace($attribute->signature->type);
-                    $getterContentHead = "kit(WTF::getPtr(${idlTypeWithNamespace}::create($getterContentHead";
+                    if ($idlTypeWithNamespace eq "WebCore::SVGStringListPropertyTearOff") {
+                        my $extraImp = "WebCore::GetOwnerElementForType<$implClassNameWithNamespace, WebCore::IsDerivedFromSVGElement<$implClassNameWithNamespace>::value>::ownerElement(IMPL), ";
+                        $getterContentHead = "kit(WTF::getPtr(${idlTypeWithNamespace}::create($extraImp$getterContentHead";
+                    } else {
+                        $getterContentHead = "kit(WTF::getPtr(${idlTypeWithNamespace}::create($getterContentHead";
+                    }
                     $getterContentTail .= ")))";
                 } else {
                     $getterContentHead = "kit(WTF::getPtr($getterContentHead";
diff --git a/WebCore/bindings/scripts/CodeGeneratorV8.pm b/WebCore/bindings/scripts/CodeGeneratorV8.pm
index d7f320e..ecfd8ae 100644
--- a/WebCore/bindings/scripts/CodeGeneratorV8.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorV8.pm
@@ -226,6 +226,9 @@ sub GetSVGPropertyTypes
     } elsif ($svgNativeType =~ /SVGListPropertyTearOff/) {
         $svgListPropertyType = $svgWrappedNativeType;
         $implIncludes{"SVGAnimatedListPropertyTearOff.h"} = 1,
+    } elsif ($svgNativeType =~ /SVGStringListPropertyTearOff/) {
+        $svgListPropertyType = "SVGStringList";
+        $implIncludes{"$svgWrappedNativeType.h"} = 1;
     }
 
     return ($svgPropertyType, $svgListPropertyType, $svgNativeType);
@@ -921,8 +924,13 @@ END
         push(@implContentDecls, "    return toV8(static_cast<$svgNativeType*>($result));\n");
     } elsif ($codeGenerator->IsSVGTypeNeedingTearOff($attrType) and not $implClassName =~ /List$/) {
         $implIncludes{"V8$attrType.h"} = 1;
-        my $svgNativeType = $codeGenerator->GetSVGTypeNeedingTearOff($attrType);
-        push(@implContentDecls, "    return toV8(WTF::getPtr(${svgNativeType}::create($result)));\n");
+        my $tearOffType = $codeGenerator->GetSVGTypeNeedingTearOff($attrType);
+        if ($tearOffType eq "SVGStringListPropertyTearOff") {
+            my $extraImp = "GetOwnerElementForType<$implClassName, IsDerivedFromSVGElement<$implClassName>::value>::ownerElement(imp), ";
+            push(@implContentDecls, "    return toV8(WTF::getPtr(${tearOffType}::create($extraImp$result)));\n");
+        } 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");
diff --git a/WebCore/svg/DeprecatedSVGAnimatedPropertyTraits.h b/WebCore/svg/DeprecatedSVGAnimatedPropertyTraits.h
index 66be29c..e20a4c7 100644
--- a/WebCore/svg/DeprecatedSVGAnimatedPropertyTraits.h
+++ b/WebCore/svg/DeprecatedSVGAnimatedPropertyTraits.h
@@ -30,18 +30,6 @@ namespace WebCore {
 template<typename Type>
 struct DeprecatedSVGAnimatedPropertyTraits : public Noncopyable { };
 
-// SVGAnimatedString
-template<>
-struct DeprecatedSVGAnimatedPropertyTraits<String> : public Noncopyable {
-    typedef const String& PassType;
-    typedef String ReturnType;
-    typedef String StoredType;
-
-    static ReturnType null() { return String(); }
-    static ReturnType toReturnType(const StoredType& type) { return type; }
-    static String toString(PassType type) { return type; }
-};
-
 // SVGAnimatedTransformList
 template<>
 struct DeprecatedSVGAnimatedPropertyTraits<SVGTransformList*> : public Noncopyable {
diff --git a/WebCore/svg/DeprecatedSVGAnimatedTemplate.h b/WebCore/svg/DeprecatedSVGAnimatedTemplate.h
index 252fa0b..9258692 100644
--- a/WebCore/svg/DeprecatedSVGAnimatedTemplate.h
+++ b/WebCore/svg/DeprecatedSVGAnimatedTemplate.h
@@ -152,7 +152,6 @@ namespace WebCore {
     }
 
     // Common type definitions, to ease IDL generation.
-    typedef DeprecatedSVGAnimatedTemplate<String> SVGAnimatedString;
     typedef DeprecatedSVGAnimatedTemplate<SVGTransformList*> SVGAnimatedTransformList;
 
 }
diff --git a/WebCore/svg/SVGAElement.cpp b/WebCore/svg/SVGAElement.cpp
index 56078ad..8e429d0 100644
--- a/WebCore/svg/SVGAElement.cpp
+++ b/WebCore/svg/SVGAElement.cpp
@@ -71,7 +71,7 @@ String SVGAElement::title() const
 void SVGAElement::parseMappedAttribute(Attribute* attr)
 {
     if (attr->name() == SVGNames::targetAttr)
-        setTargetBaseValue(attr->value());
+        setSVGTargetBaseValue(attr->value());
     else {
         if (SVGURIReference::parseMappedAttribute(attr))
             return;
@@ -105,14 +105,14 @@ void SVGAElement::synchronizeProperty(const QualifiedName& attrName)
     SVGStyledTransformableElement::synchronizeProperty(attrName);
 
     if (attrName == anyQName()) {
-        synchronizeTarget();
+        synchronizeSVGTarget();
         synchronizeHref();
         synchronizeExternalResourcesRequired();
         return;
     }
 
     if (attrName == SVGNames::targetAttr)
-        synchronizeTarget();
+        synchronizeSVGTarget();
     else if (SVGURIReference::isKnownAttribute(attrName))
         synchronizeHref();
     else if (SVGExternalResourcesRequired::isKnownAttribute(attrName))
diff --git a/WebCore/svg/SVGAElement.h b/WebCore/svg/SVGAElement.h
index 0effda2..f919a6e 100644
--- a/WebCore/svg/SVGAElement.h
+++ b/WebCore/svg/SVGAElement.h
@@ -46,6 +46,7 @@ namespace WebCore {
         virtual bool isValid() const { return SVGTests::isValid(); }
         
         virtual String title() const;
+        virtual String target() const { return svgTarget(); }
 
         virtual void parseMappedAttribute(Attribute*);
         virtual void svgAttributeChanged(const QualifiedName&);
@@ -62,10 +63,13 @@ namespace WebCore {
 
         virtual bool childShouldCreateRenderer(Node*) const;
 
-        DECLARE_ANIMATED_PROPERTY(SVGAElement, SVGNames::targetAttr, String, Target, target)
+        // This defines a non-virtual "String& target() const" method before, that would clash with "virtual String target() const"
+        // in Element. That's why it's now named "String& svgTarget() const", to avoid the clash. The CodeGenerators take care
+        // of calling svgTargetAnimated() instead of targetAnimated(), see CodeGenerator.pm.
+        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGAElement, SVGNames::targetAttr, String, SVGTarget, svgTarget)
 
         // SVGURIReference
-        DECLARE_ANIMATED_PROPERTY(SVGAElement, XLinkNames::hrefAttr, String, Href, href)
+        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGAElement, XLinkNames::hrefAttr, String, Href, href)
 
         // SVGExternalResourcesRequired
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGAElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired)
diff --git a/WebCore/svg/SVGAltGlyphElement.h b/WebCore/svg/SVGAltGlyphElement.h
index ae0903a..b9d0bc0 100644
--- a/WebCore/svg/SVGAltGlyphElement.h
+++ b/WebCore/svg/SVGAltGlyphElement.h
@@ -52,7 +52,7 @@ namespace WebCore {
         virtual bool childShouldCreateRenderer(Node*) const;
 
         // SVGURIReference
-        DECLARE_ANIMATED_PROPERTY(SVGAltGlyphElement, XLinkNames::hrefAttr, String, Href, href)
+        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGAltGlyphElement, XLinkNames::hrefAttr, String, Href, href)
     };
 
 } // namespace WebCore
diff --git a/WebCore/svg/SVGAnimatedString.h b/WebCore/svg/SVGAnimatedString.h
new file mode 100644
index 0000000..c8b842f
--- /dev/null
+++ b/WebCore/svg/SVGAnimatedString.h
@@ -0,0 +1,34 @@
+/*
+ * 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 SVGAnimatedString_h
+#define SVGAnimatedString_h
+
+#if ENABLE(SVG)
+#include "SVGAnimatedStaticPropertyTearOff.h"
+#include <wtf/text/WTFString.h>
+
+namespace WebCore {
+
+typedef SVGAnimatedStaticPropertyTearOff<String> SVGAnimatedString;
+
+} // namespace WebCore
+
+#endif // ENABLE(SVG)
+#endif
diff --git a/WebCore/svg/SVGCursorElement.h b/WebCore/svg/SVGCursorElement.h
index e09739a..d3bcb8b 100644
--- a/WebCore/svg/SVGCursorElement.h
+++ b/WebCore/svg/SVGCursorElement.h
@@ -58,7 +58,7 @@ namespace WebCore {
         DECLARE_ANIMATED_PROPERTY_NEW(SVGCursorElement, SVGNames::yAttr, SVGLength, Y, y)
 
         // SVGURIReference
-        DECLARE_ANIMATED_PROPERTY(SVGCursorElement, XLinkNames::hrefAttr, String, Href, href)
+        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGCursorElement, XLinkNames::hrefAttr, String, Href, href)
 
         // SVGExternalResourcesRequired
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGCursorElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired)
diff --git a/WebCore/svg/SVGFEBlendElement.h b/WebCore/svg/SVGFEBlendElement.h
index a0010be..44d45bf 100644
--- a/WebCore/svg/SVGFEBlendElement.h
+++ b/WebCore/svg/SVGFEBlendElement.h
@@ -38,8 +38,8 @@ private:
     virtual void synchronizeProperty(const QualifiedName&);
     virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*);
 
-    DECLARE_ANIMATED_PROPERTY(SVGFEBlendElement, SVGNames::inAttr, String, In1, in1)
-    DECLARE_ANIMATED_PROPERTY(SVGFEBlendElement, SVGNames::in2Attr, String, In2, in2)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEBlendElement, SVGNames::inAttr, String, In1, in1)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEBlendElement, SVGNames::in2Attr, String, In2, in2)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEBlendElement, SVGNames::modeAttr, int, Mode, mode)
 };
 
diff --git a/WebCore/svg/SVGFEColorMatrixElement.h b/WebCore/svg/SVGFEColorMatrixElement.h
index 9e26c7f..dcdeb41 100644
--- a/WebCore/svg/SVGFEColorMatrixElement.h
+++ b/WebCore/svg/SVGFEColorMatrixElement.h
@@ -40,7 +40,7 @@ private:
     virtual void synchronizeProperty(const QualifiedName&);
     virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*);
 
-    DECLARE_ANIMATED_PROPERTY(SVGFEColorMatrixElement, SVGNames::inAttr, String, In1, in1)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEColorMatrixElement, SVGNames::inAttr, String, In1, in1)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEColorMatrixElement, SVGNames::typeAttr, int, Type, type)
     DECLARE_ANIMATED_LIST_PROPERTY_NEW(SVGFEColorMatrixElement, SVGNames::valuesAttr, SVGNumberList, Values, values)
 };
diff --git a/WebCore/svg/SVGFEComponentTransferElement.h b/WebCore/svg/SVGFEComponentTransferElement.h
index 957661e..fe0e562 100644
--- a/WebCore/svg/SVGFEComponentTransferElement.h
+++ b/WebCore/svg/SVGFEComponentTransferElement.h
@@ -38,7 +38,7 @@ private:
     virtual void synchronizeProperty(const QualifiedName&);
     virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*);
 
-    DECLARE_ANIMATED_PROPERTY(SVGFEComponentTransferElement, SVGNames::inAttr, String, In1, in1)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEComponentTransferElement, SVGNames::inAttr, String, In1, in1)
 };
 
 } // namespace WebCore
diff --git a/WebCore/svg/SVGFECompositeElement.h b/WebCore/svg/SVGFECompositeElement.h
index 35de97e..4870848 100644
--- a/WebCore/svg/SVGFECompositeElement.h
+++ b/WebCore/svg/SVGFECompositeElement.h
@@ -39,8 +39,8 @@ private:
     virtual void synchronizeProperty(const QualifiedName&);
     virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*);
 
-    DECLARE_ANIMATED_PROPERTY(SVGFECompositeElement, SVGNames::inAttr, String, In1, in1)
-    DECLARE_ANIMATED_PROPERTY(SVGFECompositeElement, SVGNames::in2Attr, String, In2, in2)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFECompositeElement, SVGNames::inAttr, String, In1, in1)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFECompositeElement, SVGNames::in2Attr, String, In2, in2)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFECompositeElement, SVGNames::operatorAttr, int, _operator, _operator)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFECompositeElement, SVGNames::k1Attr, float, K1, k1)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFECompositeElement, SVGNames::k2Attr, float, K2, k2)
diff --git a/WebCore/svg/SVGFEConvolveMatrixElement.h b/WebCore/svg/SVGFEConvolveMatrixElement.h
index cb9a3f0..a5a8f63 100644
--- a/WebCore/svg/SVGFEConvolveMatrixElement.h
+++ b/WebCore/svg/SVGFEConvolveMatrixElement.h
@@ -44,7 +44,7 @@ private:
     static const AtomicString& kernelUnitLengthXIdentifier();
     static const AtomicString& kernelUnitLengthYIdentifier();
 
-    DECLARE_ANIMATED_PROPERTY(SVGFEConvolveMatrixElement, SVGNames::inAttr, String, In1, in1)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEConvolveMatrixElement, SVGNames::inAttr, String, In1, in1)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEConvolveMatrixElement, SVGNames::orderXAttr, long, OrderX, orderX)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEConvolveMatrixElement, SVGNames::orderYAttr, long, OrderY, orderY)
     DECLARE_ANIMATED_LIST_PROPERTY_NEW(SVGFEConvolveMatrixElement, SVGNames::kernelMatrixAttr, SVGNumberList, KernelMatrix, kernelMatrix)
diff --git a/WebCore/svg/SVGFEDiffuseLightingElement.h b/WebCore/svg/SVGFEDiffuseLightingElement.h
index b333f7d..fa946e6 100644
--- a/WebCore/svg/SVGFEDiffuseLightingElement.h
+++ b/WebCore/svg/SVGFEDiffuseLightingElement.h
@@ -46,7 +46,7 @@ private:
     static const AtomicString& kernelUnitLengthXIdentifier();
     static const AtomicString& kernelUnitLengthYIdentifier();
 
-    DECLARE_ANIMATED_PROPERTY(SVGFEDiffuseLightingElement, SVGNames::inAttr, String, In1, in1)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEDiffuseLightingElement, SVGNames::inAttr, String, In1, in1)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEDiffuseLightingElement, SVGNames::diffuseConstantAttr, float, DiffuseConstant, diffuseConstant)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEDiffuseLightingElement, SVGNames::surfaceScaleAttr, float, SurfaceScale, surfaceScale)
     DECLARE_ANIMATED_STATIC_PROPERTY_MULTIPLE_WRAPPERS_NEW(SVGFEDiffuseLightingElement, SVGNames::kernelUnitLengthAttr, kernelUnitLengthXIdentifier(), float, KernelUnitLengthX, kernelUnitLengthX)
diff --git a/WebCore/svg/SVGFEDisplacementMapElement.h b/WebCore/svg/SVGFEDisplacementMapElement.h
index 8321997..a2c9e43 100644
--- a/WebCore/svg/SVGFEDisplacementMapElement.h
+++ b/WebCore/svg/SVGFEDisplacementMapElement.h
@@ -39,8 +39,8 @@ private:
     virtual void synchronizeProperty(const QualifiedName&);
     virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*);
     
-    DECLARE_ANIMATED_PROPERTY(SVGFEDisplacementMapElement, SVGNames::inAttr, String, In1, in1)
-    DECLARE_ANIMATED_PROPERTY(SVGFEDisplacementMapElement, SVGNames::in2Attr, String, In2, in2)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEDisplacementMapElement, SVGNames::inAttr, String, In1, in1)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEDisplacementMapElement, SVGNames::in2Attr, String, In2, in2)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEDisplacementMapElement, SVGNames::xChannelSelectorAttr, int, XChannelSelector, xChannelSelector)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEDisplacementMapElement, SVGNames::yChannelSelectorAttr, int, YChannelSelector, yChannelSelector)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEDisplacementMapElement, SVGNames::scaleAttr, float, Scale, scale)
diff --git a/WebCore/svg/SVGFEGaussianBlurElement.h b/WebCore/svg/SVGFEGaussianBlurElement.h
index a4610af..3ddb437 100644
--- a/WebCore/svg/SVGFEGaussianBlurElement.h
+++ b/WebCore/svg/SVGFEGaussianBlurElement.h
@@ -44,7 +44,7 @@ private:
     static const AtomicString& stdDeviationXIdentifier();
     static const AtomicString& stdDeviationYIdentifier();
 
-    DECLARE_ANIMATED_PROPERTY(SVGFEGaussianBlurElement, SVGNames::inAttr, String, In1, in1)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEGaussianBlurElement, SVGNames::inAttr, String, In1, in1)
     DECLARE_ANIMATED_STATIC_PROPERTY_MULTIPLE_WRAPPERS_NEW(SVGFEGaussianBlurElement, SVGNames::stdDeviationAttr, stdDeviationXIdentifier(), float, StdDeviationX, stdDeviationX)
     DECLARE_ANIMATED_STATIC_PROPERTY_MULTIPLE_WRAPPERS_NEW(SVGFEGaussianBlurElement, SVGNames::stdDeviationAttr, stdDeviationYIdentifier(), float, StdDeviationY, stdDeviationY)
 };
diff --git a/WebCore/svg/SVGFEImageElement.h b/WebCore/svg/SVGFEImageElement.h
index 74dfa74..0dcf2c8 100644
--- a/WebCore/svg/SVGFEImageElement.h
+++ b/WebCore/svg/SVGFEImageElement.h
@@ -59,7 +59,7 @@ private:
     DECLARE_ANIMATED_PROPERTY_NEW(SVGFEImageElement, SVGNames::preserveAspectRatioAttr, SVGPreserveAspectRatio, PreserveAspectRatio, preserveAspectRatio)
 
     // SVGURIReference
-    DECLARE_ANIMATED_PROPERTY(SVGFEImageElement, XLinkNames::hrefAttr, String, Href, href)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEImageElement, XLinkNames::hrefAttr, String, Href, href)
 
     // SVGExternalResourcesRequired
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEImageElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired)
diff --git a/WebCore/svg/SVGFEMergeNodeElement.h b/WebCore/svg/SVGFEMergeNodeElement.h
index 89506dc..a40d7a2 100644
--- a/WebCore/svg/SVGFEMergeNodeElement.h
+++ b/WebCore/svg/SVGFEMergeNodeElement.h
@@ -22,8 +22,8 @@
 #define SVGFEMergeNodeElement_h
 
 #if ENABLE(SVG) && ENABLE(FILTERS)
+#include "SVGAnimatedPropertyMacros.h"
 #include "SVGElement.h"
-#include "SVGNames.h"
 
 namespace WebCore {
 
@@ -38,7 +38,7 @@ namespace WebCore {
         virtual void svgAttributeChanged(const QualifiedName&);
         virtual void synchronizeProperty(const QualifiedName&);
 
-        DECLARE_ANIMATED_PROPERTY(SVGFEMergeNodeElement, SVGNames::inAttr, String, In1, in1)
+        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEMergeNodeElement, SVGNames::inAttr, String, In1, in1)
     };
 
 } // namespace WebCore
diff --git a/WebCore/svg/SVGFEMorphologyElement.h b/WebCore/svg/SVGFEMorphologyElement.h
index 39b9333..845294b 100644
--- a/WebCore/svg/SVGFEMorphologyElement.h
+++ b/WebCore/svg/SVGFEMorphologyElement.h
@@ -43,7 +43,7 @@ private:
     static const AtomicString& radiusXIdentifier();
     static const AtomicString& radiusYIdentifier();
 
-    DECLARE_ANIMATED_PROPERTY(SVGFEMorphologyElement, SVGNames::inAttr, String, In1, in1)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEMorphologyElement, SVGNames::inAttr, String, In1, in1)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEMorphologyElement, SVGNames::operatorAttr, int, _operator, _operator)
     DECLARE_ANIMATED_STATIC_PROPERTY_MULTIPLE_WRAPPERS_NEW(SVGFEMorphologyElement, SVGNames::radiusAttr, radiusXIdentifier(), float, RadiusX, radiusX)
     DECLARE_ANIMATED_STATIC_PROPERTY_MULTIPLE_WRAPPERS_NEW(SVGFEMorphologyElement, SVGNames::radiusAttr, radiusYIdentifier(), float, RadiusY, radiusY)
diff --git a/WebCore/svg/SVGFEOffsetElement.h b/WebCore/svg/SVGFEOffsetElement.h
index b09b1d0..6f5e843 100644
--- a/WebCore/svg/SVGFEOffsetElement.h
+++ b/WebCore/svg/SVGFEOffsetElement.h
@@ -39,7 +39,7 @@ private:
     virtual void synchronizeProperty(const QualifiedName&);
     virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*);
 
-    DECLARE_ANIMATED_PROPERTY(SVGFEOffsetElement, SVGNames::inAttr, String, In1, in1)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEOffsetElement, SVGNames::inAttr, String, In1, in1)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEOffsetElement, SVGNames::dxAttr, float, Dx, dx)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFEOffsetElement, SVGNames::dyAttr, float, Dy, dy)
 };
diff --git a/WebCore/svg/SVGFESpecularLightingElement.h b/WebCore/svg/SVGFESpecularLightingElement.h
index 24a1c84..c5d3ac4 100644
--- a/WebCore/svg/SVGFESpecularLightingElement.h
+++ b/WebCore/svg/SVGFESpecularLightingElement.h
@@ -42,7 +42,7 @@ private:
     static const AtomicString& kernelUnitLengthXIdentifier();
     static const AtomicString& kernelUnitLengthYIdentifier();
 
-    DECLARE_ANIMATED_PROPERTY(SVGFESpecularLightingElement, SVGNames::inAttr, String, In1, in1)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFESpecularLightingElement, SVGNames::inAttr, String, In1, in1)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFESpecularLightingElement, SVGNames::specularConstantAttr, float, SpecularConstant, specularConstant)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFESpecularLightingElement, SVGNames::specularExponentAttr, float, SpecularExponent, specularExponent)
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFESpecularLightingElement, SVGNames::surfaceScaleAttr, float, SurfaceScale, surfaceScale)
diff --git a/WebCore/svg/SVGFETileElement.h b/WebCore/svg/SVGFETileElement.h
index b943c55..ffa9d81 100644
--- a/WebCore/svg/SVGFETileElement.h
+++ b/WebCore/svg/SVGFETileElement.h
@@ -38,7 +38,7 @@ private:
     virtual void synchronizeProperty(const QualifiedName&);
     virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*);
 
-    DECLARE_ANIMATED_PROPERTY(SVGFETileElement, SVGNames::inAttr, String, In1, in1)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFETileElement, SVGNames::inAttr, String, In1, in1)
 };
 
 } // namespace WebCore
diff --git a/WebCore/svg/SVGFilterElement.h b/WebCore/svg/SVGFilterElement.h
index ce9f75e..4efb958 100644
--- a/WebCore/svg/SVGFilterElement.h
+++ b/WebCore/svg/SVGFilterElement.h
@@ -72,7 +72,7 @@ private:
     DECLARE_ANIMATED_STATIC_PROPERTY_MULTIPLE_WRAPPERS_NEW(SVGFilterElement, SVGNames::filterResAttr, filterResYIdentifier(), long, FilterResY, filterResY)
 
     // SVGURIReference
-    DECLARE_ANIMATED_PROPERTY(SVGFilterElement, XLinkNames::hrefAttr, String, Href, href)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFilterElement, XLinkNames::hrefAttr, String, Href, href)
 
     // SVGExternalResourcesRequired
     DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFilterElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired)
diff --git a/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h b/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h
index 6202888..6ac1962 100644
--- a/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h
+++ b/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h
@@ -66,7 +66,7 @@ private:
     DECLARE_ANIMATED_PROPERTY_NEW(SVGFilterPrimitiveStandardAttributes, SVGNames::yAttr, SVGLength, Y, y)
     DECLARE_ANIMATED_PROPERTY_NEW(SVGFilterPrimitiveStandardAttributes, SVGNames::widthAttr, SVGLength, Width, width)
     DECLARE_ANIMATED_PROPERTY_NEW(SVGFilterPrimitiveStandardAttributes, SVGNames::heightAttr, SVGLength, Height, height)
-    DECLARE_ANIMATED_PROPERTY(SVGFilterPrimitiveStandardAttributes, SVGNames::resultAttr, String, Result, result)
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGFilterPrimitiveStandardAttributes, SVGNames::resultAttr, String, Result, result)
 };
 
 } // namespace WebCore
diff --git a/WebCore/svg/SVGForeignObjectElement.h b/WebCore/svg/SVGForeignObjectElement.h
index 55ddb3c..ee17c19 100644
--- a/WebCore/svg/SVGForeignObjectElement.h
+++ b/WebCore/svg/SVGForeignObjectElement.h
@@ -58,7 +58,7 @@ namespace WebCore {
         DECLARE_ANIMATED_PROPERTY_NEW(SVGForeignObjectElement, SVGNames::heightAttr, SVGLength, Height, height)
 
         // SVGURIReference
-        DECLARE_ANIMATED_PROPERTY(SVGForeignObjectElement, XLinkNames::hrefAttr, String, Href, href)
+        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGForeignObjectElement, XLinkNames::hrefAttr, String, Href, href)
 
         // SVGExternalResourcesRequired
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGForeignObjectElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired)
diff --git a/WebCore/svg/SVGGradientElement.h b/WebCore/svg/SVGGradientElement.h
index fdfb72c..6e23608 100644
--- a/WebCore/svg/SVGGradientElement.h
+++ b/WebCore/svg/SVGGradientElement.h
@@ -54,7 +54,7 @@ namespace WebCore {
         DECLARE_ANIMATED_PROPERTY(SVGGradientElement, SVGNames::gradientTransformAttr, SVGTransformList*, GradientTransform, gradientTransform)
 
         // SVGURIReference
-        DECLARE_ANIMATED_PROPERTY(SVGGradientElement, XLinkNames::hrefAttr, String, Href, href)
+        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGGradientElement, XLinkNames::hrefAttr, String, Href, href)
 
         // SVGExternalResourcesRequired
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGGradientElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired)
diff --git a/WebCore/svg/SVGImageElement.h b/WebCore/svg/SVGImageElement.h
index 33e2f39..b9f3865 100644
--- a/WebCore/svg/SVGImageElement.h
+++ b/WebCore/svg/SVGImageElement.h
@@ -73,7 +73,7 @@ namespace WebCore {
         DECLARE_ANIMATED_PROPERTY_NEW(SVGImageElement, SVGNames::preserveAspectRatioAttr, SVGPreserveAspectRatio, PreserveAspectRatio, preserveAspectRatio)
 
         // SVGURIReference
-        DECLARE_ANIMATED_PROPERTY(SVGImageElement, XLinkNames::hrefAttr, String, Href, href)
+        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGImageElement, XLinkNames::hrefAttr, String, Href, href)
 
         // SVGExternalResourcesRequired
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGImageElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired)
diff --git a/WebCore/svg/SVGLengthList.idl b/WebCore/svg/SVGLengthList.idl
index 73a8d21..a5771d2 100644
--- a/WebCore/svg/SVGLengthList.idl
+++ b/WebCore/svg/SVGLengthList.idl
@@ -26,7 +26,7 @@
 
 module svg {
 
-    interface [Conditional=SVG, SVGListProperty=SVGLengthList] SVGLengthList { 
+    interface [Conditional=SVG] SVGLengthList { 
         readonly attribute unsigned long numberOfItems;
 
         void clear()
diff --git a/WebCore/svg/SVGMPathElement.h b/WebCore/svg/SVGMPathElement.h
index c025cf9..3d10e5b 100644
--- a/WebCore/svg/SVGMPathElement.h
+++ b/WebCore/svg/SVGMPathElement.h
@@ -44,7 +44,7 @@ namespace WebCore {
         virtual void synchronizeProperty(const QualifiedName&);
         
         // SVGURIReference
-        DECLARE_ANIMATED_PROPERTY(SVGMPathElement, XLinkNames::hrefAttr, String, Href, href)
+        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGMPathElement, XLinkNames::hrefAttr, String, Href, href)
 
         // SVGExternalResourcesRequired
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGMPathElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired)
diff --git a/WebCore/svg/SVGPatternElement.h b/WebCore/svg/SVGPatternElement.h
index 79152c8..ce63a22 100644
--- a/WebCore/svg/SVGPatternElement.h
+++ b/WebCore/svg/SVGPatternElement.h
@@ -73,7 +73,7 @@ namespace WebCore {
         DECLARE_ANIMATED_PROPERTY(SVGPatternElement, SVGNames::patternTransformAttr, SVGTransformList*, PatternTransform, patternTransform)
 
         // SVGURIReference
-        DECLARE_ANIMATED_PROPERTY(SVGPatternElement, XLinkNames::hrefAttr, String, Href, href)
+        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGPatternElement, XLinkNames::hrefAttr, String, Href, href)
 
         // SVGExternalResourcesRequired
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGPatternElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired)
diff --git a/WebCore/svg/SVGScriptElement.h b/WebCore/svg/SVGScriptElement.h
index d4eb61d..e8695fb 100644
--- a/WebCore/svg/SVGScriptElement.h
+++ b/WebCore/svg/SVGScriptElement.h
@@ -76,7 +76,7 @@ namespace WebCore {
         virtual void dispatchErrorEvent();
 
         // SVGURIReference
-        DECLARE_ANIMATED_PROPERTY(SVGScriptElement, XLinkNames::hrefAttr, String, Href, href)
+        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGScriptElement, XLinkNames::hrefAttr, String, Href, href)
 
         // SVGExternalResourcesRequired
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGScriptElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired)
diff --git a/WebCore/svg/SVGStringList.cpp b/WebCore/svg/SVGStringList.cpp
index 9f4809f..3eb392a 100644
--- a/WebCore/svg/SVGStringList.cpp
+++ b/WebCore/svg/SVGStringList.cpp
@@ -23,29 +23,31 @@
 #if ENABLE(SVG)
 #include "SVGStringList.h"
 
+#include "SVGElement.h"
 #include "SVGParserUtilities.h"
 
 namespace WebCore {
 
-SVGStringList::SVGStringList(const QualifiedName& attributeName)
-    : SVGList<String>(attributeName)
+void SVGStringList::commitChange(SVGElement* contextElement)
 {
+    ASSERT(contextElement);
+    contextElement->invalidateSVGAttributes();
+    contextElement->svgAttributeChanged(m_attributeName);
 }
 
-void SVGStringList::reset(const String& str)
+void SVGStringList::reset(const String& string)
 {
-    ExceptionCode ec = 0;
+    parse(string, ' ');
 
-    parse(str, ' ');
-    if (numberOfItems() == 0)
-        appendItem(String(""), ec); // Create empty string...
+    // Add empty string, if list is empty.
+    if (isEmpty())
+        append(String(""));
 }
 
 void SVGStringList::parse(const String& data, UChar delimiter)
 {
     // TODO : more error checking/reporting
-    ExceptionCode ec = 0;
-    clear(ec);
+    clear();
 
     const UChar* ptr = data.characters();
     const UChar* end = ptr + data.length();
@@ -55,7 +57,7 @@ void SVGStringList::parse(const String& data, UChar delimiter)
             ptr++;
         if (ptr == start)
             break;
-        appendItem(String(start, ptr - start), ec);
+        append(String(start, ptr - start));
         skipOptionalSpacesOrDelimiter(ptr, end, delimiter);
     }
 }
diff --git a/WebCore/svg/SVGStringList.h b/WebCore/svg/SVGStringList.h
index e8841ea..c741b9d 100644
--- a/WebCore/svg/SVGStringList.h
+++ b/WebCore/svg/SVGStringList.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann at kde.org>
+ * Copyright (C) 2004, 2005, 2006, 2008 Nikolas Zimmermann <zimmermann at kde.org>
  * Copyright (C) 2004, 2005, 2006 Rob Buis <buis at kde.org>
  *
  * This library is free software; you can redistribute it and/or
@@ -22,23 +22,32 @@
 #define SVGStringList_h
 
 #if ENABLE(SVG)
-#include "PlatformString.h"
-#include "SVGList.h"
+#include "QualifiedName.h"
+#include <wtf/Vector.h>
+#include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
-    class SVGStringList : public SVGList<String> {
-    public:
-        static PassRefPtr<SVGStringList> create(const QualifiedName& attributeName) { return adoptRef(new SVGStringList(attributeName)); }
+class SVGElement;
 
-        void reset(const String& str);
-        void parse(const String& data, UChar delimiter = ',');
-        
-    private:
-        SVGStringList(const QualifiedName&);
-    };
+class SVGStringList : public Vector<String> {
+public:
+    SVGStringList(const QualifiedName& attributeName)
+        : m_attributeName(attributeName)
+    {
+    }
+
+    void reset(const String&);
+    void parse(const String&, UChar delimiter = ',');
+
+    // Only used by SVGStringListPropertyTearOff.
+    void commitChange(SVGElement* contextElement);
+
+private:
+    const QualifiedName& m_attributeName;
+};
 
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
-#endif // SVGStringList_h
+#endif
diff --git a/WebCore/svg/SVGStyledElement.h b/WebCore/svg/SVGStyledElement.h
index 5e996b3..4f796b8 100644
--- a/WebCore/svg/SVGStyledElement.h
+++ b/WebCore/svg/SVGStyledElement.h
@@ -22,8 +22,8 @@
 #define SVGStyledElement_h
 
 #if ENABLE(SVG)
+#include "SVGAnimatedPropertyMacros.h"
 #include "HTMLNames.h"
-#include "SVGElement.h"
 #include "SVGLocatable.h"
 #include "SVGStylable.h"
 #include <wtf/HashSet.h>
@@ -83,7 +83,7 @@ namespace WebCore {
 
         HashSet<SVGStyledElement*> m_elementsWithRelativeLengths;
 
-        DECLARE_ANIMATED_PROPERTY(SVGStyledElement, HTMLNames::classAttr, String, ClassName, className)
+        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGStyledElement, HTMLNames::classAttr, String, ClassName, className)
     };
 
 } // namespace WebCore
diff --git a/WebCore/svg/SVGTRefElement.h b/WebCore/svg/SVGTRefElement.h
index 7a79ae5..ffbfa55 100644
--- a/WebCore/svg/SVGTRefElement.h
+++ b/WebCore/svg/SVGTRefElement.h
@@ -45,7 +45,7 @@ namespace WebCore {
         void updateReferencedText();
 
         // SVGURIReference
-        DECLARE_ANIMATED_PROPERTY(SVGTRefElement, XLinkNames::hrefAttr, String, Href, href)
+        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGTRefElement, XLinkNames::hrefAttr, String, Href, href)
     };
 
 } // namespace WebCore
diff --git a/WebCore/svg/SVGTests.cpp b/WebCore/svg/SVGTests.cpp
index e4813cd..3317964 100644
--- a/WebCore/svg/SVGTests.cpp
+++ b/WebCore/svg/SVGTests.cpp
@@ -26,63 +26,41 @@
 #include "Attribute.h"
 #include "DOMImplementation.h"
 #include "Language.h"
-#include "SVGElement.h"
 #include "SVGNames.h"
 #include "SVGStringList.h"
 
 namespace WebCore {
 
 SVGTests::SVGTests()
+    : m_features(SVGNames::requiredFeaturesAttr)
+    , m_extensions(SVGNames::requiredExtensionsAttr)
+    , m_systemLanguage(SVGNames::systemLanguageAttr)
 {
 }
 
-SVGTests::~SVGTests()
+bool SVGTests::hasExtension(const String&) const
 {
-}
-
-SVGStringList* SVGTests::requiredFeatures() const
-{
-    if (!m_features)
-        m_features = SVGStringList::create(SVGNames::requiredFeaturesAttr);
-
-    return m_features.get();
-}
-
-SVGStringList* SVGTests::requiredExtensions() const
-{
-    if (!m_extensions)
-        m_extensions = SVGStringList::create(SVGNames::requiredExtensionsAttr);
-
-    return m_extensions.get();
-}
-
-SVGStringList* SVGTests::systemLanguage() const
-{
-    if (!m_systemLanguage)
-        m_systemLanguage = SVGStringList::create(SVGNames::systemLanguageAttr);
-
-    return m_systemLanguage.get();
+    // FIXME: Implement me!
+    return false;
 }
 
 bool SVGTests::isValid() const
 {
-    ExceptionCode ec = 0;
-
-    if (m_features) {
-        for (unsigned long i = 0; i < m_features->numberOfItems(); i++) {
-            String value = m_features->getItem(i, ec);
-            if (value.isEmpty() || !DOMImplementation::hasFeature(value, String()))
-                return false;
-        }
+    unsigned featuresSize = m_features.size();
+    for (unsigned i = 0; i < featuresSize; ++i) {
+        String value = m_features.at(i);
+        if (value.isEmpty() || !DOMImplementation::hasFeature(value, String()))
+            return false;
     }
 
-    if (m_systemLanguage) {
-        for (unsigned long i = 0; i < m_systemLanguage->numberOfItems(); i++)
-            if (m_systemLanguage->getItem(i, ec) != defaultLanguage().substring(0, 2))
-                return false;
+    unsigned systemLanguageSize = m_systemLanguage.size();
+    for (unsigned i = 0; i < systemLanguageSize; ++i) {
+        String value = m_systemLanguage.at(i);
+        if (value != defaultLanguage().substring(0, 2))
+            return false;
     }
 
-    if (m_extensions && m_extensions->numberOfItems() > 0)
+    if (!m_extensions.isEmpty())
         return false;
 
     return true;
@@ -91,13 +69,13 @@ bool SVGTests::isValid() const
 bool SVGTests::parseMappedAttribute(Attribute* attr)
 {
     if (attr->name() == SVGNames::requiredFeaturesAttr) {
-        requiredFeatures()->reset(attr->value());
+        m_features.reset(attr->value());
         return true;
     } else if (attr->name() == SVGNames::requiredExtensionsAttr) {
-        requiredExtensions()->reset(attr->value());
+        m_extensions.reset(attr->value());
         return true;
     } else if (attr->name() == SVGNames::systemLanguageAttr) {
-        systemLanguage()->reset(attr->value());
+        m_systemLanguage.reset(attr->value());
         return true;
     }
     
@@ -106,9 +84,9 @@ bool SVGTests::parseMappedAttribute(Attribute* attr)
 
 bool SVGTests::isKnownAttribute(const QualifiedName& attrName)
 {
-    return (attrName == SVGNames::requiredFeaturesAttr ||
-            attrName == SVGNames::requiredExtensionsAttr ||
-            attrName == SVGNames::systemLanguageAttr);
+    return attrName == SVGNames::requiredFeaturesAttr
+        || attrName == SVGNames::requiredExtensionsAttr
+        || attrName == SVGNames::systemLanguageAttr;
 }
 
 }
diff --git a/WebCore/svg/SVGTests.h b/WebCore/svg/SVGTests.h
index c5bb70f..f662e9a 100644
--- a/WebCore/svg/SVGTests.h
+++ b/WebCore/svg/SVGTests.h
@@ -22,37 +22,33 @@
 #define SVGTests_h
 
 #if ENABLE(SVG)
-#include <wtf/Forward.h>
-#include <wtf/RefPtr.h>
+#include "SVGStringList.h"
 
 namespace WebCore {
 
-    class Attribute;
-    class QualifiedName;
-    class SVGStringList;
+class Attribute;
+class QualifiedName;
 
-    class SVGTests {
-    public:
-        SVGStringList* requiredFeatures() const;
-        SVGStringList* requiredExtensions() const;
-        SVGStringList* systemLanguage() const;
+class SVGTests {
+public:
+    SVGStringList& requiredFeatures() { return m_features; }
+    SVGStringList& requiredExtensions() { return m_extensions; }
+    SVGStringList& systemLanguage() { return m_systemLanguage; }
 
-        bool hasExtension(const String&) const { return false; }
+    bool hasExtension(const String&) const;
+    bool isValid() const;
 
-        bool isValid() const;
-        
-        bool parseMappedAttribute(Attribute*);
-        bool isKnownAttribute(const QualifiedName&);
+    bool parseMappedAttribute(Attribute*);
+    bool isKnownAttribute(const QualifiedName&);
 
-    protected:
-        SVGTests();
-        ~SVGTests();
+protected:
+    SVGTests();
 
-    private:
-        mutable RefPtr<SVGStringList> m_features;
-        mutable RefPtr<SVGStringList> m_extensions;
-        mutable RefPtr<SVGStringList> m_systemLanguage;
-    };
+private:
+    SVGStringList m_features;
+    SVGStringList m_extensions;
+    SVGStringList m_systemLanguage;
+};
 
 } // namespace WebCore
 
diff --git a/WebCore/svg/SVGTextPathElement.h b/WebCore/svg/SVGTextPathElement.h
index b06c2bf..2375078 100644
--- a/WebCore/svg/SVGTextPathElement.h
+++ b/WebCore/svg/SVGTextPathElement.h
@@ -72,7 +72,7 @@ namespace WebCore {
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGTextPathElement, SVGNames::spacingAttr, int, Spacing, spacing)
     
         // SVGURIReference
-        DECLARE_ANIMATED_PROPERTY(SVGTextPathElement, XLinkNames::hrefAttr, String, Href, href)
+        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGTextPathElement, XLinkNames::hrefAttr, String, Href, href)
     };
 
 } // namespace WebCore
diff --git a/WebCore/svg/SVGURIReference.h b/WebCore/svg/SVGURIReference.h
index 096f5a5..3804791 100644
--- a/WebCore/svg/SVGURIReference.h
+++ b/WebCore/svg/SVGURIReference.h
@@ -27,20 +27,20 @@
 
 namespace WebCore {
 
-    class Attribute;
+class Attribute;
 
-    class SVGURIReference {
-    public:
-        virtual ~SVGURIReference() { }
+class SVGURIReference {
+public:
+    virtual ~SVGURIReference() { }
 
-        bool parseMappedAttribute(Attribute*);
-        bool isKnownAttribute(const QualifiedName&);
+    bool parseMappedAttribute(Attribute*);
+    bool isKnownAttribute(const QualifiedName&);
 
-        static String getTarget(const String& url);
+    static String getTarget(const String& url);
 
-    protected:
-        virtual void setHrefBaseValue(DeprecatedSVGAnimatedPropertyTraits<String>::PassType) = 0;
-    };
+protected:
+    virtual void setHrefBaseValue(const String&) = 0;
+};
 
 } // namespace WebCore
 
diff --git a/WebCore/svg/SVGUseElement.h b/WebCore/svg/SVGUseElement.h
index bb7e6d0..b127450 100644
--- a/WebCore/svg/SVGUseElement.h
+++ b/WebCore/svg/SVGUseElement.h
@@ -87,7 +87,7 @@ namespace WebCore {
         DECLARE_ANIMATED_PROPERTY_NEW(SVGUseElement, SVGNames::heightAttr, SVGLength, Height, height)
 
         // SVGURIReference
-        DECLARE_ANIMATED_PROPERTY(SVGUseElement, XLinkNames::hrefAttr, String, Href, href)
+        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGUseElement, XLinkNames::hrefAttr, String, Href, href)
 
         // SVGExternalResourcesRequired
         DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGUseElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired)
diff --git a/WebCore/svg/SVGViewElement.cpp b/WebCore/svg/SVGViewElement.cpp
index 6a83066..c59a080 100644
--- a/WebCore/svg/SVGViewElement.cpp
+++ b/WebCore/svg/SVGViewElement.cpp
@@ -34,6 +34,7 @@ namespace WebCore {
 
 inline SVGViewElement::SVGViewElement(const QualifiedName& tagName, Document* document)
     : SVGStyledElement(tagName, document)
+    , m_viewTarget(SVGNames::viewTargetAttr)
 {
 }
 
@@ -42,18 +43,10 @@ PassRefPtr<SVGViewElement> SVGViewElement::create(const QualifiedName& tagName,
     return adoptRef(new SVGViewElement(tagName, document));
 }
 
-SVGStringList* SVGViewElement::viewTarget() const
-{
-    if (!m_viewTarget)
-        m_viewTarget = SVGStringList::create(SVGNames::viewTargetAttr);
-
-    return m_viewTarget.get();
-}
-
 void SVGViewElement::parseMappedAttribute(Attribute* attr)
 {
     if (attr->name() == SVGNames::viewTargetAttr)
-        viewTarget()->reset(attr->value());
+        viewTarget().reset(attr->value());
     else {
         if (SVGExternalResourcesRequired::parseMappedAttribute(attr)
            || SVGFitToViewBox::parseMappedAttribute(document(), attr)
diff --git a/WebCore/svg/SVGViewElement.h b/WebCore/svg/SVGViewElement.h
index 4c14900..7e239e3 100644
--- a/WebCore/svg/SVGViewElement.h
+++ b/WebCore/svg/SVGViewElement.h
@@ -23,6 +23,7 @@
 
 #if ENABLE(SVG)
 #include "SVGAnimatedPropertyMacros.h"
+#include "SVGStringList.h"
 #include "SVGStyledElement.h"
 #include "SVGExternalResourcesRequired.h"
 #include "SVGFitToViewBox.h"
@@ -30,7 +31,6 @@
 
 namespace WebCore {
 
-    class SVGStringList;
     class SVGViewElement : public SVGStyledElement,
                            public SVGExternalResourcesRequired,
                            public SVGFitToViewBox,
@@ -38,7 +38,7 @@ namespace WebCore {
     public:
         static PassRefPtr<SVGViewElement> create(const QualifiedName&, Document*);
 
-        SVGStringList* viewTarget() const;
+        SVGStringList& viewTarget() { return m_viewTarget; }
 
     private:
         SVGViewElement(const QualifiedName&, Document*);
@@ -54,8 +54,8 @@ namespace WebCore {
         // SVGFitToViewBox
         DECLARE_ANIMATED_PROPERTY_NEW(SVGViewElement, SVGNames::viewBoxAttr, FloatRect, ViewBox, viewBox)
         DECLARE_ANIMATED_PROPERTY_NEW(SVGViewElement, SVGNames::preserveAspectRatioAttr, SVGPreserveAspectRatio, PreserveAspectRatio, preserveAspectRatio)
- 
-        mutable RefPtr<SVGStringList> m_viewTarget;
+
+        SVGStringList m_viewTarget;
     };
 
 } // namespace WebCore
diff --git a/WebCore/svg/properties/SVGAnimatedPropertyMacros.h b/WebCore/svg/properties/SVGAnimatedPropertyMacros.h
index 12d0565..e1c75b9 100644
--- a/WebCore/svg/properties/SVGAnimatedPropertyMacros.h
+++ b/WebCore/svg/properties/SVGAnimatedPropertyMacros.h
@@ -32,6 +32,42 @@
 
 namespace WebCore {
 
+class SVGElement;
+
+// GetOwnerElementForType implementation
+template<typename OwnerType, bool isDerivedFromSVGElement>
+struct GetOwnerElementForType;
+
+template<typename OwnerType>
+struct GetOwnerElementForType<OwnerType, true> {
+    static SVGElement* ownerElement(OwnerType* type)
+    {
+        return type;
+    }
+};
+
+template<typename OwnerType>
+struct GetOwnerElementForType<OwnerType, false> {    
+    static SVGElement* ownerElement(OwnerType* type)
+    {
+        SVGElement* context = type->contextElement();
+        ASSERT(context);
+        return context;
+    }
+};
+
+// IsDerivedFromSVGElement implementation
+template<typename OwnerType>
+struct IsDerivedFromSVGElement {
+    static const bool value = true;
+};
+
+class SVGViewSpec;
+template<>
+struct IsDerivedFromSVGElement<SVGViewSpec> {
+    static const bool value = false;
+};
+
 template<typename PropertyType>
 struct SVGSynchronizableAnimatedProperty {
     SVGSynchronizableAnimatedProperty()
diff --git a/WebCore/svg/properties/SVGAnimatedPropertySynchronizer.h b/WebCore/svg/properties/SVGAnimatedPropertySynchronizer.h
index 2b816ab..b97073d 100644
--- a/WebCore/svg/properties/SVGAnimatedPropertySynchronizer.h
+++ b/WebCore/svg/properties/SVGAnimatedPropertySynchronizer.h
@@ -23,42 +23,6 @@
 #if ENABLE(SVG)
 namespace WebCore {
 
-class SVGElement;
-
-// GetOwnerElementForType implementation
-template<typename OwnerType, bool isDerivedFromSVGElement>
-struct GetOwnerElementForType;
-
-template<typename OwnerType>
-struct GetOwnerElementForType<OwnerType, true> : public Noncopyable {
-    static SVGElement* ownerElement(OwnerType* type)
-    {
-        return type;
-    }
-};
-
-template<typename OwnerType>
-struct GetOwnerElementForType<OwnerType, false> : public Noncopyable {    
-    static SVGElement* ownerElement(OwnerType* type)
-    {
-        SVGElement* context = type->contextElement();
-        ASSERT(context);
-        return context;
-    }
-};
-
-// IsDerivedFromSVGElement implementation
-template<typename OwnerType>
-struct IsDerivedFromSVGElement : public Noncopyable {
-    static const bool value = true;
-};
-
-class SVGViewSpec;
-template<>
-struct IsDerivedFromSVGElement<SVGViewSpec> : public Noncopyable {
-    static const bool value = false;
-};
-
 // Helper template used for synchronizing SVG <-> XML properties
 template<bool isDerivedFromSVGElement>
 struct SVGAnimatedPropertySynchronizer {
diff --git a/WebCore/svg/properties/SVGPropertyTraits.h b/WebCore/svg/properties/SVGPropertyTraits.h
index a3d1e7c..5b12a22 100644
--- a/WebCore/svg/properties/SVGPropertyTraits.h
+++ b/WebCore/svg/properties/SVGPropertyTraits.h
@@ -28,6 +28,7 @@
 #include "SVGLengthList.h"
 #include "SVGNumberList.h"
 #include "SVGPreserveAspectRatio.h"
+#include "SVGStringList.h"
 #include <wtf/text/StringBuilder.h>
 
 namespace WebCore {
@@ -117,6 +118,11 @@ struct SVGPropertyTraits<String> {
     static String toString(const String& type) { return type; }
 };
 
+template<>
+struct SVGPropertyTraits<SVGStringList> {
+    typedef String ListItemType;
+};
+
 }
 
 #endif
diff --git a/WebCore/svg/properties/SVGStringListPropertyTearOff.h b/WebCore/svg/properties/SVGStringListPropertyTearOff.h
new file mode 100644
index 0000000..10fa65d
--- /dev/null
+++ b/WebCore/svg/properties/SVGStringListPropertyTearOff.h
@@ -0,0 +1,136 @@
+/*
+ * 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 SVGStringListPropertyTearOff_h
+#define SVGStringListPropertyTearOff_h
+
+#if ENABLE(SVG)
+#include "ExceptionCode.h"
+#include "SVGProperty.h"
+#include "SVGStringList.h"
+
+namespace WebCore {
+
+// Used for lists that return non-modifyable values: SVGStringList.
+class SVGStringListPropertyTearOff : public SVGProperty {
+public:
+    static PassRefPtr<SVGStringListPropertyTearOff> create(SVGElement* contextElement, SVGStringList& values)
+    {
+        return adoptRef(new SVGStringListPropertyTearOff(contextElement, values));
+    }
+
+    // SVGList API
+    void clear(ExceptionCode&)
+    {
+        m_values.clear();
+    }
+
+    unsigned numberOfItems() const
+    {
+        return m_values.size();
+    }
+
+    String initialize(const String& newItem, ExceptionCode&)
+    {
+        // Spec: Clears all existing current items from the list and re-initializes the list to hold the single item specified by the parameter.
+        m_values.clear();
+        m_values.append(newItem);
+
+        m_values.commitChange(m_contextElement.get());
+        return newItem;
+    }
+
+    String getItem(unsigned index, ExceptionCode& ec)
+    {
+        if (index >= m_values.size()) {
+            ec = INDEX_SIZE_ERR;
+            return String();
+        }
+
+        return m_values.at(index);
+    }
+
+    String insertItemBefore(const String& newItem, unsigned index, ExceptionCode&)
+    {
+        // Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list.
+        if (index > m_values.size())
+             index = m_values.size();
+
+        // Spec: Inserts a new item into the list at the specified position. The index of the item before which the new item is to be
+        // inserted. The first item is number 0. If the index is equal to 0, then the new item is inserted at the front of the list.
+        m_values.insert(index, newItem);
+
+        m_values.commitChange(m_contextElement.get());
+        return newItem;
+    }
+
+    String replaceItem(const String& newItem, unsigned index, ExceptionCode& ec)
+    {
+        if (index >= m_values.size()) {
+            ec = INDEX_SIZE_ERR;
+            return String();
+        }
+
+        // Update the value and the wrapper at the desired position 'index'. 
+        m_values.at(index) = newItem;
+
+        m_values.commitChange(m_contextElement.get());
+        return newItem;
+    }
+
+    String removeItem(unsigned index, ExceptionCode& ec)
+    {
+        if (index >= m_values.size()) {
+            ec = INDEX_SIZE_ERR;
+            return String();
+        }
+
+        String oldItem = m_values.at(index);
+        m_values.remove(index);
+
+        m_values.commitChange(m_contextElement.get());
+        return oldItem;
+    }
+
+    String appendItem(const String& newItem, ExceptionCode&)
+    {
+        // Append the value and wrapper at the end of the list.
+        m_values.append(newItem);
+
+        m_values.commitChange(m_contextElement.get());
+        return newItem;
+    }
+
+private:
+    SVGStringListPropertyTearOff(SVGElement* contextElement, SVGStringList& values)
+        : m_contextElement(contextElement)
+        , m_values(values)
+    {
+        ASSERT(m_contextElement);
+    }
+
+private:
+    RefPtr<SVGElement> m_contextElement;
+    SVGStringList& m_values;
+};
+
+}
+
+#endif // ENABLE(SVG)
+#endif // SVGStringListPropertyTearOff_h

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list