2011-05-20 Rob Buis <rbuis@rim.com>
authorrwlbuis@webkit.org <rwlbuis@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 20 May 2011 19:53:13 +0000 (19:53 +0000)
committerrwlbuis@webkit.org <rwlbuis@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 20 May 2011 19:53:13 +0000 (19:53 +0000)
        Reviewed by Dirk Schulze.

        Use test from ietestcenter fails
        https://bugs.webkit.org/show_bug.cgi?id=60844

        When an id changes on an in-document element, we need to check whether the id
        is part of the pending elements. Since this is the same thing as happens in
        insertedIntoDocument, split out the common code into buildPendingResourcesIfNeeded.

        Test: svg/W3C-SVG-1.1-SE/struct-use-14-f.svg

        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::svgAttributeChanged):
        (WebCore::SVGStyledElement::insertedIntoDocument):
        (WebCore::SVGStyledElement::buildPendingResourcesIfNeeded):
        * svg/SVGStyledElement.h:
2011-05-20  Rob Buis  <rbuis@rim.com>

        Reviewed by Dirk Schulze.

        Use test from ietestcenter fails
        https://bugs.webkit.org/show_bug.cgi?id=60844

        * platform/mac/svg/W3C-SVG-1.1-SE/struct-use-14-f-expected.png: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/struct-use-14-f-expected.txt: Added.
        * svg/W3C-SVG-1.1-SE/struct-use-14-f.svg: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@86978 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/struct-use-14-f-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/struct-use-14-f-expected.txt [new file with mode: 0644]
LayoutTests/svg/W3C-SVG-1.1-SE/struct-use-14-f.svg [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/svg/SVGStyledElement.cpp
Source/WebCore/svg/SVGStyledElement.h

index f894194..3f98828 100644 (file)
@@ -1,3 +1,14 @@
+2011-05-20  Rob Buis  <rbuis@rim.com>
+
+        Reviewed by Dirk Schulze.
+
+        Use test from ietestcenter fails
+        https://bugs.webkit.org/show_bug.cgi?id=60844
+
+        * platform/mac/svg/W3C-SVG-1.1-SE/struct-use-14-f-expected.png: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/struct-use-14-f-expected.txt: Added.
+        * svg/W3C-SVG-1.1-SE/struct-use-14-f.svg: Added.
+
 2011-05-20  Simon Fraser  <simon.fraser@apple.com>
 
         Reviewed by Sam Weinig.
 2011-05-20  Simon Fraser  <simon.fraser@apple.com>
 
         Reviewed by Sam Weinig.
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/struct-use-14-f-expected.png b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/struct-use-14-f-expected.png
new file mode 100644 (file)
index 0000000..a7121b1
Binary files /dev/null and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/struct-use-14-f-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/struct-use-14-f-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/struct-use-14-f-expected.txt
new file mode 100644 (file)
index 0000000..29edb34
--- /dev/null
@@ -0,0 +1,23 @@
+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 100x100
+      RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+        RenderSVGContainer {g} at (0,0) size 100x100
+          RenderSVGPath {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
+      RenderSVGPath {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
+      RenderSVGContainer {use} at (0,0) size 100x100
+        RenderSVGContainer {g} at (0,0) size 100x100
+          RenderSVGPath {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
+    RenderSVGContainer {g} at (10,310) size 231x38
+      RenderSVGText {text} at (10,310) size 231x38 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 231x38
+          chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 231.00: "$Revision: 1.3 $"
+    RenderSVGPath {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
+    RenderSVGContainer {g} at (0,0) size 480x24
+      RenderSVGPath {rect} at (0,0) size 480x22 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#FF0000]}] [x=1.00] [y=1.00] [width=478.00] [height=20.00]
+      RenderSVGText {text} at (207,-1) size 66x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 66x24
+          chunk 1 (middle anchor) text run 1 at (207.00,18.00) startOffset 0 endOffset 5 width 66.00: "DRAFT"
diff --git a/LayoutTests/svg/W3C-SVG-1.1-SE/struct-use-14-f.svg b/LayoutTests/svg/W3C-SVG-1.1-SE/struct-use-14-f.svg
new file mode 100644 (file)
index 0000000..6ddd2a8
--- /dev/null
@@ -0,0 +1,70 @@
+<svg id="svg-root" width="100%" height="100%" viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <!--======================================================================-->
+  <!--=  Copyright 2008 World Wide Web Consortium, (Massachusetts          =-->
+  <!--=  Institute of Technology, European Research Consortium for         =-->
+  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
+  <!--=  All Rights Reserved.                                              =-->
+  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
+  <!--======================================================================-->
+  <d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/" template-version="1.4" reviewer="CM" author="Microsoft" status="reviewed" version="$Revision: 1.3 $" testname="$RCSfile: struct-use-14-f.svg,v $">
+    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://dev.w3.org/SVG/profiles/1.1F2/publish/struct.html#UseElement">
+      <p>
+        Test that the 'use' element's 'xlink:href' attribute referencing dynamically set 'id' attributes is supported.
+      </p>
+      <p>
+        The test defines a 'use' element with its 'xlink:href' attribute set to 'pass' which is an invalid element id. A green 'rect' element has its 'id'
+        attribute set to 'pass' via 'setAttribute'. The referenced 'rect' is a child of a 'defs' element so that it does not render, and it is wrapped with a 'g'
+        element in order to obtain a DOM reference to it.
+      </p>
+    </d:testDescription>
+    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        Run the test. No interaction required. 
+      </p>
+    </d:operatorScript>
+    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        The test is passed if there is a green square visible on the page, and no red.
+      </p>
+    </d:passCriteria>
+  </d:SVGTestCase>
+  <title id="test-title">$RCSfile: struct-use-14-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>
+        <g id="test">
+            <rect width="100" height="100" fill="green"/>
+        </g>
+    </defs>
+    <rect width="100" height="100" fill="red"/>
+    <use xlink:href="#pass"/>
+    <script type="text/javascript"><![CDATA[
+        try
+        {
+            var test = document.getElementById("test");
+            var rect = test.firstChild.nextSibling;
+
+            rect.setAttribute("id", "pass");
+        }
+        catch(ex)
+        {
+            alert("ERROR: " + ex.message);
+        }]]>
+    </script>
+  </g>
+  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
+    <text id="revision" x="10" y="340" stroke="none" fill="black">$Revision: 1.3 $</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>
index 62beff7..4ff479e 100644 (file)
@@ -1,3 +1,22 @@
+2011-05-20  Rob Buis  <rbuis@rim.com>
+
+        Reviewed by Dirk Schulze.
+
+        Use test from ietestcenter fails
+        https://bugs.webkit.org/show_bug.cgi?id=60844
+
+        When an id changes on an in-document element, we need to check whether the id
+        is part of the pending elements. Since this is the same thing as happens in
+        insertedIntoDocument, split out the common code into buildPendingResourcesIfNeeded.
+
+        Test: svg/W3C-SVG-1.1-SE/struct-use-14-f.svg
+
+        * svg/SVGStyledElement.cpp:
+        (WebCore::SVGStyledElement::svgAttributeChanged):
+        (WebCore::SVGStyledElement::insertedIntoDocument):
+        (WebCore::SVGStyledElement::buildPendingResourcesIfNeeded):
+        * svg/SVGStyledElement.h:
+
 2011-05-20  Abhishek Arya  <inferno@chromium.org>
 
         Reviewed by Kent Tamura.
 2011-05-20  Abhishek Arya  <inferno@chromium.org>
 
         Reviewed by Kent Tamura.
index 0e4a1bb..6da8f48 100644 (file)
@@ -336,6 +336,8 @@ void SVGStyledElement::svgAttributeChanged(const QualifiedName& attrName)
         // Notify resources about id changes, this is important as we cache resources by id in SVGDocumentExtensions
         if (object && object->isSVGResourceContainer())
             object->toRenderSVGResourceContainer()->idChanged();
         // Notify resources about id changes, this is important as we cache resources by id in SVGDocumentExtensions
         if (object && object->isSVGResourceContainer())
             object->toRenderSVGResourceContainer()->idChanged();
+        if (inDocument())
+            buildPendingResourcesIfNeeded();
     }
 
     // Invalidate all SVGElementInstances associated with us
     }
 
     // Invalidate all SVGElementInstances associated with us
@@ -362,7 +364,11 @@ void SVGStyledElement::insertedIntoDocument()
 {
     SVGElement::insertedIntoDocument();
     updateRelativeLengthsInformation();
 {
     SVGElement::insertedIntoDocument();
     updateRelativeLengthsInformation();
+    buildPendingResourcesIfNeeded();
+}
 
 
+void SVGStyledElement::buildPendingResourcesIfNeeded() const
+{
     Document* document = this->document();
     if (!needsPendingResourceHandling() || !document)
         return;
     Document* document = this->document();
     if (!needsPendingResourceHandling() || !document)
         return;
index 65b9525..375a8a9 100644 (file)
@@ -87,6 +87,8 @@ protected:
 private:
     virtual bool isStyled() const { return true; }
 
 private:
     virtual bool isStyled() const { return true; }
 
+    void buildPendingResourcesIfNeeded() const;
+
     HashSet<SVGStyledElement*> m_elementsWithRelativeLengths;
 
     // Animated property declarations
     HashSet<SVGStyledElement*> m_elementsWithRelativeLengths;
 
     // Animated property declarations