2006-07-27 Eric Seidel <eric@eseidel.com>
authoreseidel <eseidel@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 28 Jul 2006 18:07:35 +0000 (18:07 +0000)
committereseidel <eseidel@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 28 Jul 2006 18:07:35 +0000 (18:07 +0000)
        Reviewed by darin.

        Add better SVGLoad event support.
        http://bugzilla.opendarwin.org/show_bug.cgi?id=6010
        There will still need to be additional support added for <link> and <script> elements.
        Not all of the error -> loaded -> error transition cases work yet.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchGenericEvent):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLImageLoader.h:
        (WebCore::HTMLImageLoader::haveFiredLoadEvent):
        (WebCore::HTMLImageLoader::setHaveFiredLoadEvent):
        * ksvg2/misc/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::SVGImageLoader):
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * ksvg2/misc/SVGImageLoader.h:
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::parseMappedAttribute):
        * ksvg2/svg/SVGAnimatedBoolean.h:
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement):
        (WebCore::SVGElement::parseMappedAttribute):
        (WebCore::SVGElement::haveLoadedRequiredResources):
        (WebCore::SVGElement::sendSVGLoadEventIfPossible):
        (WebCore::SVGElement::closeRenderer):
        * ksvg2/svg/SVGElement.h:
        (WebCore::SVGElement::rendererIsNeeded):
        (WebCore::svg_dynamic_cast):
        * ksvg2/svg/SVGExternalResourcesRequired.h:
        * ksvg2/svg/SVGImageElement.cpp:
        (SVGImageElement::SVGImageElement):
        (SVGImageElement::haveLoadedRequiredResources):
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * ksvg2/svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        (WebCore::SVGScriptElement::parseMappedAttribute):
        (WebCore::SVGScriptElement::executeScript):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): use new Event() instead of createEvent

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

40 files changed:
LayoutTests/ChangeLog
LayoutTests/svg/W3C-SVG-1.1/extend-namespace-01-f-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/extend-namespace-01-f-expected.png
LayoutTests/svg/W3C-SVG-1.1/extend-namespace-01-f-expected.txt
LayoutTests/svg/W3C-SVG-1.1/interact-events-01-b-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/interact-events-01-b-expected.png
LayoutTests/svg/W3C-SVG-1.1/struct-dom-01-b-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/struct-dom-01-b-expected.png
LayoutTests/svg/W3C-SVG-1.1/struct-dom-01-b-expected.txt
LayoutTests/svg/W3C-SVG-1.1/struct-dom-02-b-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/struct-dom-02-b-expected.png
LayoutTests/svg/W3C-SVG-1.1/struct-dom-02-b-expected.txt
LayoutTests/svg/W3C-SVG-1.1/struct-dom-03-b-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/struct-dom-03-b-expected.png
LayoutTests/svg/W3C-SVG-1.1/struct-dom-03-b-expected.txt
LayoutTests/svg/W3C-SVG-1.1/struct-dom-04-b-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/struct-dom-04-b-expected.png
LayoutTests/svg/W3C-SVG-1.1/struct-dom-04-b-expected.txt
LayoutTests/svg/W3C-SVG-1.1/struct-dom-05-b-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/struct-dom-05-b-expected.png
LayoutTests/svg/W3C-SVG-1.1/struct-dom-05-b-expected.txt
LayoutTests/svg/W3C-SVG-1.1/struct-dom-06-b-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/struct-dom-06-b-expected.png
LayoutTests/svg/W3C-SVG-1.1/struct-dom-06-b-expected.txt
WebCore/ChangeLog
WebCore/dom/EventTargetNode.cpp
WebCore/html/HTMLImageLoader.cpp
WebCore/html/HTMLImageLoader.h
WebCore/ksvg2/misc/SVGImageLoader.cpp
WebCore/ksvg2/misc/SVGImageLoader.h
WebCore/ksvg2/svg/SVGAElement.cpp
WebCore/ksvg2/svg/SVGAnimatedBoolean.h
WebCore/ksvg2/svg/SVGElement.cpp
WebCore/ksvg2/svg/SVGElement.h
WebCore/ksvg2/svg/SVGExternalResourcesRequired.h
WebCore/ksvg2/svg/SVGImageElement.cpp
WebCore/ksvg2/svg/SVGImageElement.h
WebCore/ksvg2/svg/SVGSVGElement.cpp
WebCore/ksvg2/svg/SVGScriptElement.cpp
WebCore/xml/xmlhttprequest.cpp

index 9ab1e5f..1128a46 100644 (file)
@@ -1,4 +1,36 @@
-2006-07-10  Rob Buis  <buis@kde.org>
+2006-07-27  Eric Seidel  <eric@eseidel.com>
+
+        Reviewed by darin.
+        
+        Add better SVGLoad event support.
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=6010
+        A bunch of the SVG tests didn't render anything since they never received an SVGLoad, now they properly render.
+
+        * svg/W3C-SVG-1.1/extend-namespace-01-f-expected.checksum:
+        * svg/W3C-SVG-1.1/extend-namespace-01-f-expected.png:
+        * svg/W3C-SVG-1.1/extend-namespace-01-f-expected.txt:
+        * svg/W3C-SVG-1.1/interact-events-01-b-expected.checksum:
+        * svg/W3C-SVG-1.1/interact-events-01-b-expected.png:
+        * svg/W3C-SVG-1.1/struct-dom-01-b-expected.checksum:
+        * svg/W3C-SVG-1.1/struct-dom-01-b-expected.png:
+        * svg/W3C-SVG-1.1/struct-dom-01-b-expected.txt:
+        * svg/W3C-SVG-1.1/struct-dom-02-b-expected.checksum:
+        * svg/W3C-SVG-1.1/struct-dom-02-b-expected.png:
+        * svg/W3C-SVG-1.1/struct-dom-02-b-expected.txt:
+        * svg/W3C-SVG-1.1/struct-dom-03-b-expected.checksum:
+        * svg/W3C-SVG-1.1/struct-dom-03-b-expected.png:
+        * svg/W3C-SVG-1.1/struct-dom-03-b-expected.txt:
+        * svg/W3C-SVG-1.1/struct-dom-04-b-expected.checksum:
+        * svg/W3C-SVG-1.1/struct-dom-04-b-expected.png:
+        * svg/W3C-SVG-1.1/struct-dom-04-b-expected.txt:
+        * svg/W3C-SVG-1.1/struct-dom-05-b-expected.checksum:
+        * svg/W3C-SVG-1.1/struct-dom-05-b-expected.png:
+        * svg/W3C-SVG-1.1/struct-dom-05-b-expected.txt:
+        * svg/W3C-SVG-1.1/struct-dom-06-b-expected.checksum:
+        * svg/W3C-SVG-1.1/struct-dom-06-b-expected.png:
+        * svg/W3C-SVG-1.1/struct-dom-06-b-expected.txt:
+
+2006-07-27  Rob Buis  <buis@kde.org>
 
         Reviewed by Maciej.
 
index 604f2b4..4d7f661 100644 (file)
@@ -1 +1 @@
-bf2a1657c3305f4818f274ffb5fad223
\ No newline at end of file
+40e2571f917ea604155cc19efaa67b48
\ No newline at end of file
index c3134a2..71385b1 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/extend-namespace-01-f-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/extend-namespace-01-f-expected.png differ
index f970bcf..9906285 100644 (file)
@@ -1,12 +1,32 @@
 layer at (0,0) size 480x360
   RenderView at (0,0) size 480x360
     KCanvasContainer {svg} at (0.50,0.50) size 479x359
-      KCanvasContainer {g} at (0,0) size 0x0
+      KCanvasContainer {g} at (126.05,61.42) size 242.55x213.97
         KCanvasContainer {g} at (0,0) size 0x0
           RenderSVGText {text} at (0,0) size 465x18
             RenderText {#text} at (0,0) size 349x17
               text run at (0,0) width 349: "Pie chart built from data in a different namespace."
-        KCanvasContainer {g} at (0,0) size 0x0
+        KCanvasContainer {g} at (126.05,61.42) size 242.55x213.97
+          KCanvasItem {path} at (263.86,76.89) size 104.74x81.61 [transform={m=((1.00,0.00)(0.00,1.00)) t=(27.00,-13.00)}] [stroke={[type=SOLID] [color=#0000FF] [stroke width=3.00]}] [fill={[type=SOLID] [color=#FF8888]}] [data="M240.00,170.00L340.00,170.00C340.10,139.74,326.50,111.06,303.00,92.00"]
+          RenderSVGText {text} at (0,0) size 465x16
+            RenderText {#text} at (0,0) size 28x16
+              text run at (0,0) width 28: "East"
+          KCanvasItem {path} at (190.64,61.42) size 113.76x110.37 [stroke={[type=SOLID] [color=#000000] [stroke width=2.00]}] [fill={[type=SOLID] [color=#6D6D6D]}] [data="M240.00,170.00L303.00,92.00C271.46,66.45,227.60,62.50,192.00,82.00"]
+          RenderSVGText {text} at (0,0) size 465x16
+            RenderText {#text} at (0,0) size 35x16
+              text run at (0,0) width 35: "North"
+          KCanvasItem {path} at (126.05,80.65) size 115.35x130.67 [stroke={[type=SOLID] [color=#000000] [stroke width=2.00]}] [fill={[type=SOLID] [color=#929292]}] [data="M240.00,170.00L192.00,82.00C146.30,106.75,127.18,162.38,148.00,210.00"]
+          RenderSVGText {text} at (0,0) size 465x16
+            RenderText {#text} at (0,0) size 32x16
+              text run at (0,0) width 32: "West"
+          KCanvasItem {path} at (146.68,168.31) size 94.70x100.88 [stroke={[type=SOLID] [color=#000000] [stroke width=2.00]}] [fill={[type=SOLID] [color=#B6B6B6]}] [data="M240.00,170.00L148.00,210.00C160.89,239.68,187.34,261.29,219.00,268.00"]
+          RenderSVGText {text} at (0,0) size 465x16
+            RenderText {#text} at (0,0) size 46x16
+              text run at (0,0) width 46: "Central"
+          KCanvasItem {path} at (217.81,169) size 123.26x106.39 [stroke={[type=SOLID] [color=#000000] [stroke width=2.00]}] [fill={[type=SOLID] [color=#DBDBDB]}] [data="M240.00,170.00L219.00,268.00C248.57,274.35,279.43,266.98,302.94,247.94C326.44,228.90,340.07,200.25,340.00,170.00"]
+          RenderSVGText {text} at (0,0) size 465x16
+            RenderText {#text} at (0,0) size 37x16
+              text run at (0,0) width 37: "South"
       RenderSVGText {text} at (0,0) size 465x46
         RenderText {#text} at (0,0) size 264x46
           text run at (0,0) width 264: "$Revision: 1.1 $"
index 78a497f..492f65e 100644 (file)
@@ -1 +1 @@
-85fc21b21c47910cdf1b7a4958189b51
\ No newline at end of file
+a3116bfe576508c62ac7839701ddab5b
\ No newline at end of file
index ca9e980..304dcb9 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/interact-events-01-b-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/interact-events-01-b-expected.png differ
index cf679d5..e326d7c 100644 (file)
@@ -1 +1 @@
-0763e33b8aad0b768fa66561d59cf282
\ No newline at end of file
+40a6bbba9a7b85b0d4c525998e31763a
\ No newline at end of file
index d63693e..83b06e3 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/struct-dom-01-b-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/struct-dom-01-b-expected.png differ
index 7a8aa84..9580439 100644 (file)
@@ -3,6 +3,9 @@ layer at (0,0) size 480x360
     KCanvasContainer {svg} at (0.50,0.50) size 479x359
       KCanvasContainer {g} at (40,150) size 50x50
         KCanvasItem {rect} at (40,150) size 50x50 [fill={[type=SOLID] [color=#FF0000]}] [data="M40.00,150.00L90.00,150.00L90.00,200.00L40.00,200.00"]
+        RenderSVGText {text} at (0,0) size 465x18
+          RenderText {#text} at (0,0) size 266x18
+            text run at (0,0) width 266: "This document's root identifier is: svg-root"
       RenderSVGText {text} at (0,0) size 465x36
         RenderText {#text} at (0,0) size 198x36
           text run at (0,0) width 198: "$Revision: 1.1 $"
index ccd33e4..ab4b534 100644 (file)
@@ -1 +1 @@
-990fae4e2eca24cf2f3fe0438a6eb8ca
\ No newline at end of file
+eb57fcf5ec1c29efaf461f26d34bd57f
\ No newline at end of file
index 28ddd69..9776266 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/struct-dom-02-b-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/struct-dom-02-b-expected.png differ
index d41f6f9..2c67a21 100644 (file)
@@ -6,3 +6,33 @@ layer at (0,0) size 480x360
         RenderText {#text} at (0,0) size 198x36
           text run at (0,0) width 198: "$Revision: 1.1 $"
       KCanvasItem {rect} at (0.50,0.50) size 479x359 [stroke={[type=SOLID] [color=#000000]}] [data="M1.00,1.00L479.00,1.00L479.00,359.00L1.00,359.00"]
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 46x36
+          text run at (0,0) width 46: "xml"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 46x36
+          text run at (0,0) width 46: "true"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 129x36
+          text run at (0,0) width 129: "stylesheets"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 46x36
+          text run at (0,0) width 46: "true"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 70x36
+          text run at (0,0) width 70: "views"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 46x36
+          text run at (0,0) width 46: "true"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 52x36
+          text run at (0,0) width 52: "css2"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 46x36
+          text run at (0,0) width 46: "true"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 76x36
+          text run at (0,0) width 76: "events"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 46x36
+          text run at (0,0) width 46: "true"
index ccd33e4..8c2851e 100644 (file)
@@ -1 +1 @@
-990fae4e2eca24cf2f3fe0438a6eb8ca
\ No newline at end of file
+ebd638b5c2115f2143e86868c6c44d56
\ No newline at end of file
index 28ddd69..5af0de5 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/struct-dom-03-b-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/struct-dom-03-b-expected.png differ
index d41f6f9..e73de1c 100644 (file)
@@ -6,3 +6,33 @@ layer at (0,0) size 480x360
         RenderText {#text} at (0,0) size 198x36
           text run at (0,0) width 198: "$Revision: 1.1 $"
       KCanvasItem {rect} at (0.50,0.50) size 479x359 [stroke={[type=SOLID] [color=#000000]}] [data="M1.00,1.00L479.00,1.00L479.00,359.00L1.00,359.00"]
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 99x36
+          text run at (0,0) width 99: "uievents"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 56x36
+          text run at (0,0) width 56: "false"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 154x36
+          text run at (0,0) width 154: "mouseevents"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 46x36
+          text run at (0,0) width 46: "true"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 181x36
+          text run at (0,0) width 181: "mutationevents"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 46x36
+          text run at (0,0) width 46: "true"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 102x36
+          text run at (0,0) width 102: "traversal"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 46x36
+          text run at (0,0) width 46: "true"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 148x36
+          text run at (0,0) width 148: "org.w3c.svg"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 56x36
+          text run at (0,0) width 56: "false"
index ccd33e4..32097ef 100644 (file)
@@ -1 +1 @@
-990fae4e2eca24cf2f3fe0438a6eb8ca
\ No newline at end of file
+aaf1fe3f6c5db04e7fd07b4830be3e5e
\ No newline at end of file
index 28ddd69..7817c00 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/struct-dom-04-b-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/struct-dom-04-b-expected.png differ
index d41f6f9..66f21ed 100644 (file)
@@ -6,3 +6,33 @@ layer at (0,0) size 480x360
         RenderText {#text} at (0,0) size 198x36
           text run at (0,0) width 198: "$Revision: 1.1 $"
       KCanvasItem {rect} at (0.50,0.50) size 479x359 [stroke={[type=SOLID] [color=#000000]}] [data="M1.00,1.00L479.00,1.00L479.00,359.00L1.00,359.00"]
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 207x36
+          text run at (0,0) width 207: "org.w3c.svg.lang"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 56x36
+          text run at (0,0) width 56: "false"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 258x36
+          text run at (0,0) width 258: "org.w3c.svg.dynamic"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 56x36
+          text run at (0,0) width 56: "false"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 218x36
+          text run at (0,0) width 218: "org.w3c.svg.static"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 56x36
+          text run at (0,0) width 56: "false"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 209x36
+          text run at (0,0) width 209: "org.w3c.dom.svg"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 56x36
+          text run at (0,0) width 56: "false"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 148x36
+          text run at (0,0) width 148: "org.w3c.svg"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 56x36
+          text run at (0,0) width 56: "false"
index ccd33e4..88b6adf 100644 (file)
@@ -1 +1 @@
-990fae4e2eca24cf2f3fe0438a6eb8ca
\ No newline at end of file
+9058873570c32158449fa57b60caaa3b
\ No newline at end of file
index 28ddd69..620844e 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/struct-dom-05-b-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/struct-dom-05-b-expected.png differ
index d41f6f9..1dd0ebc 100644 (file)
@@ -6,3 +6,33 @@ layer at (0,0) size 480x360
         RenderText {#text} at (0,0) size 198x36
           text run at (0,0) width 198: "$Revision: 1.1 $"
       KCanvasItem {rect} at (0.50,0.50) size 479x359 [stroke={[type=SOLID] [color=#000000]}] [data="M1.00,1.00L479.00,1.00L479.00,359.00L1.00,359.00"]
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 279x36
+          text run at (0,0) width 279: "org.w3c.dom.svg.static"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 56x36
+          text run at (0,0) width 56: "false"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 335x36
+          text run at (0,0) width 335: "org.w3c.dom.svg.animation"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 56x36
+          text run at (0,0) width 56: "false"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 319x36
+          text run at (0,0) width 319: "org.w3c.dom.svg.dynamic"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 56x36
+          text run at (0,0) width 56: "false"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 246x36
+          text run at (0,0) width 246: "org.w3c.dom.svg.all"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 56x36
+          text run at (0,0) width 56: "false"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 185x36
+          text run at (0,0) width 185: "org.w3c.svg.all"
+      RenderSVGText {text} at (0,0) size 465x36
+        RenderText {#text} at (0,0) size 56x36
+          text run at (0,0) width 56: "false"
index 3a22af9..44358a8 100644 (file)
@@ -1 +1 @@
-b50397794a544a22aaf283804f83b426
\ No newline at end of file
+667ede172909f628f8032933dde32df6
\ No newline at end of file
index d08745c..606283f 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/struct-dom-06-b-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/struct-dom-06-b-expected.png differ
index 7367820..3fa691c 100644 (file)
@@ -1,12 +1,11 @@
 layer at (0,0) size 480x360
   RenderView at (0,0) size 480x360
-    KCanvasContainer {svg} at (0,0) size 479.50x450
-      KCanvasContainer {g} at (0,0) size 450x450
-        KCanvasItem {rect} at (0,0) size 450x450 [fill={[type=SOLID] [color=#FF0000]}] [data="M0.00,0.00L450.00,0.00L450.00,450.00L0.00,450.00"]
-        RenderSVGText {text} at (0,0) size 465x72
-          RenderText {#text} at (0,0) size 418x72
-            text run at (0,0) width 418: "Removing DOM Elements is"
-            text run at (0,36) width 213: "not supported"
+    KCanvasContainer {svg} at (0.50,0.50) size 479x359
+      KCanvasContainer {g} at (0,0) size 0x0
+        KCanvasItem {rect} at (inf,inf) size 0x0 [fill={[type=SOLID] [color=#FF0000]}] [data=""]
+        RenderSVGText {text} at (0,0) size 465x18
+          RenderText {#text} at (0,0) size 148x18
+            text run at (0,0) width 148: "DOM API is supported"
       RenderSVGText {text} at (0,0) size 465x36
         RenderText {#text} at (0,0) size 198x36
           text run at (0,0) width 198: "$Revision: 1.1 $"
index 256651f..3d98d57 100644 (file)
@@ -1,3 +1,49 @@
+2006-07-27  Eric Seidel  <eric@eseidel.com>
+
+        Reviewed by darin.
+        
+        Add better SVGLoad event support.
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=6010
+        There will still need to be additional support added for <link> and <script> elements.
+        Not all of the error -> loaded -> error transition cases work yet.
+
+        * dom/EventTargetNode.cpp:
+        (WebCore::EventTargetNode::dispatchGenericEvent):
+        * html/HTMLImageLoader.cpp:
+        (WebCore::HTMLImageLoader::dispatchLoadEvent):
+        * html/HTMLImageLoader.h:
+        (WebCore::HTMLImageLoader::haveFiredLoadEvent):
+        (WebCore::HTMLImageLoader::setHaveFiredLoadEvent):
+        * ksvg2/misc/SVGImageLoader.cpp:
+        (WebCore::SVGImageLoader::SVGImageLoader):
+        (WebCore::SVGImageLoader::dispatchLoadEvent):
+        * ksvg2/misc/SVGImageLoader.h:
+        * ksvg2/svg/SVGAElement.cpp:
+        (WebCore::SVGAElement::parseMappedAttribute):
+        * ksvg2/svg/SVGAnimatedBoolean.h:
+        * ksvg2/svg/SVGElement.cpp:
+        (WebCore::SVGElement::SVGElement):
+        (WebCore::SVGElement::parseMappedAttribute):
+        (WebCore::SVGElement::haveLoadedRequiredResources):
+        (WebCore::SVGElement::sendSVGLoadEventIfPossible):
+        (WebCore::SVGElement::closeRenderer):
+        * ksvg2/svg/SVGElement.h:
+        (WebCore::SVGElement::rendererIsNeeded):
+        (WebCore::svg_dynamic_cast):
+        * ksvg2/svg/SVGExternalResourcesRequired.h:
+        * ksvg2/svg/SVGImageElement.cpp:
+        (SVGImageElement::SVGImageElement):
+        (SVGImageElement::haveLoadedRequiredResources):
+        * ksvg2/svg/SVGImageElement.h:
+        * ksvg2/svg/SVGSVGElement.cpp:
+        (WebCore::SVGSVGElement::parseMappedAttribute):
+        * ksvg2/svg/SVGScriptElement.cpp:
+        (WebCore::SVGScriptElement::SVGScriptElement):
+        (WebCore::SVGScriptElement::parseMappedAttribute):
+        (WebCore::SVGScriptElement::executeScript):
+        * xml/xmlhttprequest.cpp:
+        (WebCore::XMLHttpRequest::callReadyStateChangeListener): use new Event() instead of createEvent
+
 2006-07-27  Mitz Pettel  <opendarwin.org@mitzpettel.com>
 
         Reviewed by Anders.
index d0ffbca..ee1df9a 100644 (file)
@@ -169,8 +169,7 @@ bool EventTargetNode::dispatchGenericEvent(PassRefPtr<Event> e, ExceptionCode&,
     RefPtr<Event> evt(e);
     assert(!eventDispatchForbidden());
     assert(evt->target());
-    
-    // ### check that type specified
+    assert(!evt->type().isNull()); // JavaScript code could create an event with name
     
     // work out what nodes to send event to
     DeprecatedPtrList<Node> nodeChain;
index 744498e..a1419a0 100644 (file)
@@ -102,9 +102,9 @@ void HTMLImageLoader::updateFromElement()
 
 void HTMLImageLoader::dispatchLoadEvent()
 {
-    if (!m_firedLoad && m_image) {
-        m_firedLoad = true;
-        element()->dispatchHTMLEvent(m_image->isErrorImage() ? errorEvent : loadEvent, false, false);
+    if (!haveFiredLoadEvent() && image()) {
+        setHaveFiredLoadEvent(true);
+        element()->dispatchHTMLEvent(image()->isErrorImage() ? errorEvent : loadEvent, false, false);
     }
 }
 
index cd4b956..21811d0 100644 (file)
@@ -38,7 +38,7 @@ public:
 
     virtual void updateFromElement();
 
-    void dispatchLoadEvent();
+    virtual void dispatchLoadEvent();
 
     Element* element() const { return m_element; }
     bool imageComplete() const { return m_imageComplete; }
@@ -51,6 +51,9 @@ public:
 
 protected:
     void setLoadingImage(CachedImage*);
+    
+    bool haveFiredLoadEvent() { return m_firedLoad; }
+    void setHaveFiredLoadEvent(bool firedLoad) { m_firedLoad = firedLoad; }
 
 private:
     Element* m_element;
index 50146d3..3252ae1 100644 (file)
@@ -37,7 +37,8 @@
 
 namespace WebCore {
 
-SVGImageLoader::SVGImageLoader(SVGImageElement *node) : HTMLImageLoader(node)
+SVGImageLoader::SVGImageLoader(SVGImageElement* node)
+    : HTMLImageLoader(node)
 {
 }
 
@@ -68,6 +69,17 @@ void SVGImageLoader::updateFromElement()
         renderer->resetAnimation();
 }
 
+void SVGImageLoader::dispatchLoadEvent()
+{
+    if (!haveFiredLoadEvent() && image()) {
+        setHaveFiredLoadEvent(true);
+        if (image()->isErrorImage()) {
+            // FIXME: We're supposed to put the document in an "error state" per the spec.
+        } else
+            static_cast<SVGElement*>(element())->sendSVGLoadEventIfPossible(true);
+    }
+}
+
 }
 
 #endif // SVG_SUPPORT
index 985f89c..bcf58f6 100644 (file)
@@ -30,10 +30,11 @@ namespace WebCore
     class SVGImageElement;
     class SVGImageLoader : public HTMLImageLoader {
     public:
-        SVGImageLoader(SVGImageElement *node);
+        SVGImageLoader(SVGImageElement*);
         virtual ~SVGImageLoader();
         
         virtual void updateFromElement();
+        virtual void dispatchLoadEvent();
     };
 };
 
index b140a20..ee98391 100644 (file)
@@ -61,14 +61,16 @@ void SVGAElement::parseMappedAttribute(MappedAttribute *attr)
     if (attr->name() == SVGNames::targetAttr) {
         target()->setBaseVal(value.impl());
     } else {
-        if(SVGURIReference::parseMappedAttribute(attr))
-        {
+        if (SVGURIReference::parseMappedAttribute(attr)) {
             m_isLink = attr->value() != 0;
             return;
         }
-        if(SVGTests::parseMappedAttribute(attr)) return;
-        if(SVGLangSpace::parseMappedAttribute(attr)) return;
-        if(SVGExternalResourcesRequired::parseMappedAttribute(attr)) return;        
+        if (SVGTests::parseMappedAttribute(attr))
+            return;
+        if (SVGLangSpace::parseMappedAttribute(attr))
+            return;
+        if (SVGExternalResourcesRequired::parseMappedAttribute(attr))
+            return;
         SVGStyledTransformableElement::parseMappedAttribute(attr);
     }
 }
index 72b33d0..79b9f88 100644 (file)
@@ -20,8 +20,8 @@
     Boston, MA 02111-1307, USA.
 */
 
-#ifndef KSVG_SVGAnimatedBooleanImpl_H
-#define KSVG_SVGAnimatedBooleanImpl_H
+#ifndef SVGAnimatedBooleanImpl_H
+#define SVGAnimatedBooleanImpl_H
 #if SVG_SUPPORT
 
 #include "Shared.h"
index 59ca439..c809994 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "Attr.h"
 #include "Document.h"
+#include "Event.h"
 #include "EventListener.h"
 #include "EventNames.h"
 #include "HTMLNames.h"
@@ -44,7 +45,6 @@ using namespace EventNames;
 
 SVGElement::SVGElement(const QualifiedName& tagName, Document* doc)
     : StyledElement(tagName, doc)
-    , m_closed(false)
 {
 }
 
@@ -132,7 +132,9 @@ void SVGElement::addSVGEventListener(const AtomicString& eventType, const Attrib
 void SVGElement::parseMappedAttribute(MappedAttribute *attr)
 {
     // standard events
-    if (attr->name() == onclickAttr)
+    if (attr->name() == onloadAttr)
+        addSVGEventListener(loadEvent, attr);
+    else if (attr->name() == onclickAttr)
         addSVGEventListener(clickEvent, attr);
     else if (attr->name() == onmousedownAttr)
         addSVGEventListener(mousedownEvent, attr);
@@ -152,6 +154,39 @@ void SVGElement::parseMappedAttribute(MappedAttribute *attr)
         StyledElement::parseMappedAttribute(attr);
 }
 
+bool SVGElement::haveLoadedRequiredResources()
+{
+    Node* child = fastFirstChild();
+    while (child) {
+        if (child->isSVGElement() && !static_cast<SVGElement*>(child)->haveLoadedRequiredResources())
+            return false;
+        child = child->nextSibling();
+    }
+    return true;
+}
+
+void SVGElement::sendSVGLoadEventIfPossible(bool sendParentLoadEvents)
+{
+    RefPtr<SVGElement> currentTarget = this;
+    while (currentTarget && currentTarget->haveLoadedRequiredResources()) {
+        RefPtr<Node> parent;
+        if (sendParentLoadEvents)
+            parent = parentNode(); // save the next parent to dispatch too incase dispatching the event changes the tree
+        
+        RefPtr<Event> event = new Event(loadEvent, false, false);
+        event->setTarget(currentTarget.get());
+        handleLocalEvents(event.get(), false);
+        currentTarget = (parent && parent->isSVGElement()) ? static_pointer_cast<SVGElement>(parent) : 0;
+    }
+}
+
+void SVGElement::closeRenderer()
+{
+    // closeRenderer() is called when the close tag is reached for an element (e.g. </svg>)
+    // we send SVGLoad events here if we can, otherwise they'll be sent when any required loads finish
+    sendSVGLoadEventIfPossible();
+}
+
 bool SVGElement::childShouldCreateRenderer(Node *child) const
 {
     if (child->isSVGElement())
index ae452c8..ec73391 100644 (file)
@@ -57,9 +57,6 @@ namespace WebCore {
 
         // Internal
         virtual void parseMappedAttribute(MappedAttribute*);
-
-        // To be implemented by any element which can establish new viewports...
-        virtual DeprecatedString adjustViewportClipping() const { return DeprecatedString::null; }
         
         virtual bool isStyled() const { return false; }
         virtual bool isStyledTransformable() const { return false; }
@@ -71,24 +68,21 @@ namespace WebCore {
         // For SVGTests
         virtual bool isValid() const { return true; }
         
-        virtual void closeRenderer() { m_closed = true; }
-        virtual bool rendererIsNeeded(RenderStyle *) { return false; }
-        virtual bool childShouldCreateRenderer(Node *) const;
+        virtual void closeRenderer();
+        virtual bool rendererIsNeeded(RenderStyle*) { return false; }
+        virtual bool childShouldCreateRenderer(Node*) const;
         
-        // helper:
-        bool isClosed() const { return m_closed; }
-
-    private:
-        bool m_closed;
-        void addSVGEventListener(const AtomicString& eventType, const Attribute* attr);
+        void sendSVGLoadEventIfPossible(bool sendParentLoadEvents = false);
+        
+    protected:
+        void addSVGEventListener(const AtomicString& eventType, const Attribute*);
+        virtual bool haveLoadedRequiredResources();
     };
-};
 
-namespace WebCore {
-    static inline SVGElement *svg_dynamic_cast(Node *node) {
-        SVGElement *svgElement = NULL;
+    static inline SVGElement* svg_dynamic_cast(Node* node) {
+        SVGElement* svgElement = 0;
         if (node && node->isSVGElement())
-            svgElement = static_cast<SVGElement *>(node);
+            svgElement = static_cast<SVGElement*>(node);
         return svgElement;
     }
 };
index 6631e86..53c60a8 100644 (file)
@@ -20,8 +20,8 @@
     Boston, MA 02111-1307, USA.
 */
 
-#ifndef KSVG_SVGExternalResourcesRequiredImpl_H
-#define KSVG_SVGExternalResourcesRequiredImpl_H
+#ifndef SVGExternalResourcesRequiredImpl_H
+#define SVGExternalResourcesRequiredImpl_H
 #if SVG_SUPPORT
 
 #include <wtf/RefPtr.h>
@@ -30,6 +30,16 @@ namespace WebCore {
     class MappedAttribute;
     class SVGAnimatedBoolean;
 
+    // FIXME: This is wrong for several reasons:
+    // 1. externalResourcesRequired is not animateable according to SVG 1.1 section 5.9
+    // 2. externalResourcesRequired should just be part of SVGElement, and default to "false" for all elements
+    /*
+     SPEC: Note that the SVG DOM 
+     defines the attribute externalResourcesRequired as being of type SVGAnimatedBoolean, whereas the 
+     SVG language definition says that externalResourcesRequired is not animated. Because the SVG 
+     language definition states that externalResourcesRequired cannot be animated, the animVal will 
+     always be the same as the baseVal.
+     */
     class SVGExternalResourcesRequired {
     public:
         SVGExternalResourcesRequired();
index 7f40c5e..0962743 100644 (file)
@@ -29,6 +29,7 @@
 #include "CSSPropertyNames.h"
 #include "KCanvasRenderingStyle.h"
 #include "RenderSVGImage.h"
+#include "SVGAnimatedBoolean.h"
 #include "SVGAnimatedLength.h"
 #include "SVGAnimatedPreserveAspectRatio.h"
 #include "SVGAnimatedString.h"
 using namespace WebCore;
 
 SVGImageElement::SVGImageElement(const QualifiedName& tagName, Document *doc)
-: SVGStyledTransformableElement(tagName, doc), SVGTests(), SVGLangSpace(), SVGExternalResourcesRequired(), SVGURIReference(), m_imageLoader(this)
+    : SVGStyledTransformableElement(tagName, doc)
+    , SVGTests()
+    , SVGLangSpace()
+    , SVGExternalResourcesRequired()
+    , SVGURIReference()
+    , m_imageLoader(this)
 {
 }
 
@@ -115,6 +121,11 @@ RenderObject *SVGImageElement::createRenderer(RenderArena *arena, RenderStyle *s
     return new (arena) RenderSVGImage(this);
 }
 
+bool SVGImageElement::haveLoadedRequiredResources()
+{
+    return (!externalResourcesRequired()->baseVal() || m_imageLoader.imageComplete());
+}
+
 void SVGImageElement::attach()
 {
     SVGStyledTransformableElement::attach();
index 687d68b..15d3b22 100644 (file)
@@ -63,6 +63,9 @@ namespace WebCore
 
         virtual bool rendererIsNeeded(RenderStyle *style) { return StyledElement::rendererIsNeeded(style); }
         virtual RenderObject *createRenderer(RenderArena *arena, RenderStyle *style);
+        
+    protected:
+        virtual bool haveLoadedRequiredResources();
 
     private:
         mutable RefPtr<SVGAnimatedLength> m_x;
index c42f962..a433e30 100644 (file)
@@ -222,9 +222,7 @@ void SVGSVGElement::parseMappedAttribute(MappedAttribute *attr)
     const AtomicString& value = attr->value();
     if (!nearestViewportElement()) {
         // Only handle events if we're the outermost <svg> element
-        if (attr->name() == onloadAttr)
-            addSVGWindowEventListner(loadEvent, attr);
-        else if (attr->name() == onunloadAttr)
+        if (attr->name() == onunloadAttr)
             addSVGWindowEventListner(unloadEvent, attr);
         else if (attr->name() == onabortAttr)
             addSVGWindowEventListner(abortEvent, attr);
index 020f014..5b11feb 100644 (file)
@@ -23,7 +23,6 @@
 #include "config.h"
 #if SVG_SUPPORT
 #include "PlatformString.h"
-//#include <kdom/ecma/Ecma.h>
 #include "Attr.h"
 #include "StringImpl.h"
 
 #include "SVGNames.h"
 #include "SVGScriptElement.h"
 
-using namespace WebCore;
+namespace WebCore {
 
-SVGScriptElement::SVGScriptElement(const QualifiedName& tagName, Document *doc) : SVGElement(tagName, doc), SVGURIReference(), SVGExternalResourcesRequired()
+SVGScriptElement::SVGScriptElement(const QualifiedName& tagName, Document* doc)
+    : SVGElement(tagName, doc)
+    , SVGURIReference()
+    , SVGExternalResourcesRequired()
 {
 }
 
@@ -55,10 +57,11 @@ void SVGScriptElement::parseMappedAttribute(MappedAttribute *attr)
 {
     if (attr->name() == SVGNames::typeAttr)
             setType(attr->value().impl());
-    else
-    {
-        if(SVGURIReference::parseMappedAttribute(attr)) return;
-        if(SVGExternalResourcesRequired::parseMappedAttribute(attr)) return;
+    else {
+        if(SVGURIReference::parseMappedAttribute(attr))
+            return;
+        if(SVGExternalResourcesRequired::parseMappedAttribute(attr))
+            return;
 
         SVGElement::parseMappedAttribute(attr);
     }
@@ -77,14 +80,12 @@ void SVGScriptElement::executeScript(Document *document, StringImpl *jsCode)
 
     // Run script
     KJS::Completion comp = ecmaEngine->evaluate(jsCode.deprecatedString(), ecmaEngine->globalObject());
-    if(comp.complType() == KJS::Throw)
-    {
+    if (comp.complType() == KJS::Throw) {
         KJS::ExecState *exec = ecmaEngine->globalExec();
         KJS::JSValue *exVal = comp.value();
 
         int lineno = -1;
-        if(exVal->isObject())
-        {
+        if (exVal->isObject()) {
             KJS::JSValue *lineVal = static_cast<KJS::JSObject *>(exVal)->get(exec, "line");
             if(lineVal->type() == KJS::NumberType)
                 lineno = int(lineVal->toNumber(exec));
@@ -92,8 +93,7 @@ void SVGScriptElement::executeScript(Document *document, StringImpl *jsCode)
 
         // Fire ERROR_EVENT upon errors...
         SVGDocument *svgDocument = static_cast<SVGDocument *>(document);
-        if(svgDocument && document->hasListenerType(ERROR_EVENT))
-        {
+        if (svgDocument && document->hasListenerType(ERROR_EVENT)) {
             RefPtr<Event> event = svgDocument->createEvent("SVGEvents");
             event->initEvent(EventNames::errorEvent, false, false);
             svgDocument->dispatchRecursiveEvent(event.get(), svgDocument->lastChild());
@@ -114,6 +114,8 @@ void SVGScriptElement::executeScript(Document *document, StringImpl *jsCode)
 #endif
 }
 
+}
+
 // vim:ts=4:noet
 #endif // SVG_SUPPORT
 
index b848bfa..2a307f6 100644 (file)
@@ -213,16 +213,12 @@ void XMLHttpRequest::changeState(XMLHttpRequestState newState)
 void XMLHttpRequest::callReadyStateChangeListener()
 {
     if (m_doc && m_doc->frame() && m_onReadyStateChangeListener) {
-        ExceptionCode ec;
-        RefPtr<Event> ev = m_doc->createEvent("HTMLEvents", ec);
-        ev->initEvent(readystatechangeEvent, true, true);
+        RefPtr<Event> ev = new Event(readystatechangeEvent, true, true);
         m_onReadyStateChangeListener->handleEvent(ev.get(), true);
     }
     
     if (m_doc && m_doc->frame() && m_state == Completed && m_onLoadListener) {
-        ExceptionCode ec;
-        RefPtr<Event> ev = m_doc->createEvent("HTMLEvents", ec);
-        ev->initEvent(loadEvent, true, true);
+        RefPtr<Event> ev = new Event(loadEvent, true, true);
         m_onLoadListener->handleEvent(ev.get(), true);
     }
 }