Reviewed by Maciej.
authorrwlbuis <rwlbuis@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Feb 2007 08:29:50 +0000 (08:29 +0000)
committerrwlbuis <rwlbuis@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Feb 2007 08:29:50 +0000 (08:29 +0000)
        http://bugs.webkit.org/show_bug.cgi?id=12609
        Any SVG element will create renderers even when children of HTML elements

        Allow creation of svg renderers only when parent is SVG, except for
        the <svg> element.

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

38 files changed:
LayoutTests/ChangeLog
LayoutTests/svg/custom/xhtml-no-svg-renderer-expected.checksum [new file with mode: 0644]
LayoutTests/svg/custom/xhtml-no-svg-renderer-expected.png [new file with mode: 0644]
LayoutTests/svg/custom/xhtml-no-svg-renderer-expected.txt [new file with mode: 0644]
LayoutTests/svg/custom/xhtml-no-svg-renderer.xhtml [new file with mode: 0644]
WebCore/ChangeLog
WebCore/ksvg2/svg/SVGAElement.h
WebCore/ksvg2/svg/SVGAnimationElement.h
WebCore/ksvg2/svg/SVGCircleElement.h
WebCore/ksvg2/svg/SVGClipPathElement.h
WebCore/ksvg2/svg/SVGDefsElement.cpp
WebCore/ksvg2/svg/SVGDefsElement.h
WebCore/ksvg2/svg/SVGDescElement.h
WebCore/ksvg2/svg/SVGElement.cpp
WebCore/ksvg2/svg/SVGEllipseElement.h
WebCore/ksvg2/svg/SVGFilterElement.h
WebCore/ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h
WebCore/ksvg2/svg/SVGForeignObjectElement.h
WebCore/ksvg2/svg/SVGGElement.h
WebCore/ksvg2/svg/SVGGradientElement.h
WebCore/ksvg2/svg/SVGImageElement.h
WebCore/ksvg2/svg/SVGLineElement.h
WebCore/ksvg2/svg/SVGMarkerElement.h
WebCore/ksvg2/svg/SVGMaskElement.h
WebCore/ksvg2/svg/SVGPathElement.h
WebCore/ksvg2/svg/SVGPatternElement.h
WebCore/ksvg2/svg/SVGRectElement.h
WebCore/ksvg2/svg/SVGStopElement.h
WebCore/ksvg2/svg/SVGStyledElement.cpp
WebCore/ksvg2/svg/SVGStyledElement.h
WebCore/ksvg2/svg/SVGSwitchElement.h
WebCore/ksvg2/svg/SVGSymbolElement.h
WebCore/ksvg2/svg/SVGTRefElement.h
WebCore/ksvg2/svg/SVGTSpanElement.h
WebCore/ksvg2/svg/SVGTextElement.h
WebCore/ksvg2/svg/SVGTitleElement.h
WebCore/ksvg2/svg/SVGUseElement.h
WebCore/ksvg2/svg/SVGViewElement.h

index 46c31ab..bd66d7a 100644 (file)
@@ -2,6 +2,19 @@
 
         Reviewed by Maciej.
 
+        Add testcase for:
+        http://bugs.webkit.org/show_bug.cgi?id=12609
+        Any SVG element will create renderers even when children of HTML elements
+
+        * svg/custom/xhtml-no-svg-renderer-expected.checksum: Added.
+        * svg/custom/xhtml-no-svg-renderer-expected.png: Added.
+        * svg/custom/xhtml-no-svg-renderer-expected.txt: Added.
+        * svg/custom/xhtml-no-svg-renderer.xhtml: Added.
+
+2007-02-28  Rob Buis  <buis@kde.org>
+
+        Reviewed by Maciej.
+
         Add test for:
         http://bugs.webkit.org/show_bug.cgi?id=12913
         Markers do not render in webkit when it misses markerWidth or markerHeight attribute
diff --git a/LayoutTests/svg/custom/xhtml-no-svg-renderer-expected.checksum b/LayoutTests/svg/custom/xhtml-no-svg-renderer-expected.checksum
new file mode 100644 (file)
index 0000000..ae7a7bd
--- /dev/null
@@ -0,0 +1 @@
+18f1f64eab31dfb69467a497de9442d7
\ No newline at end of file
diff --git a/LayoutTests/svg/custom/xhtml-no-svg-renderer-expected.png b/LayoutTests/svg/custom/xhtml-no-svg-renderer-expected.png
new file mode 100644 (file)
index 0000000..fc96c0b
Binary files /dev/null and b/LayoutTests/svg/custom/xhtml-no-svg-renderer-expected.png differ
diff --git a/LayoutTests/svg/custom/xhtml-no-svg-renderer-expected.txt b/LayoutTests/svg/custom/xhtml-no-svg-renderer-expected.txt
new file mode 100644 (file)
index 0000000..eafe439
--- /dev/null
@@ -0,0 +1,6 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x116
+  RenderBlock {html} at (0,0) size 800x116
+    RenderBody {body} at (8,8) size 784x100
+      RenderBlock {div} at (0,0) size 100x100 [bgcolor=#008000]
diff --git a/LayoutTests/svg/custom/xhtml-no-svg-renderer.xhtml b/LayoutTests/svg/custom/xhtml-no-svg-renderer.xhtml
new file mode 100644 (file)
index 0000000..e772e1d
--- /dev/null
@@ -0,0 +1,7 @@
+<html xmlns='http://www.w3.org/1999/xhtml'>
+<body>
+<div style="width:100px;height:100px;background-color:green">
+<rect xmlns="http://www.w3.org/2000/svg" width="100px" height="100px" fill="red"/>
+</div>
+</body>
+</html>
index 3480489..40f3f10 100644 (file)
@@ -2,6 +2,58 @@
 
         Reviewed by Maciej.
 
+        http://bugs.webkit.org/show_bug.cgi?id=12609
+        Any SVG element will create renderers even when children of HTML elements
+
+        Allow creation of svg renderers only when parent is SVG, except for
+        the <svg> element.
+
+        * ksvg2/svg/SVGAElement.h:
+        * ksvg2/svg/SVGAnimationElement.h:
+        * ksvg2/svg/SVGCircleElement.h:
+        * ksvg2/svg/SVGClipPathElement.h:
+        (WebCore::SVGClipPathElement::rendererIsNeeded):
+        * ksvg2/svg/SVGDefsElement.cpp:
+        * ksvg2/svg/SVGDefsElement.h:
+        * ksvg2/svg/SVGDescElement.h:
+        (WebCore::SVGDescElement::rendererIsNeeded):
+        * ksvg2/svg/SVGElement.cpp:
+        * ksvg2/svg/SVGEllipseElement.h:
+        * ksvg2/svg/SVGFilterElement.h:
+        (WebCore::SVGFilterElement::rendererIsNeeded):
+        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
+        (WebCore::SVGFilterPrimitiveStandardAttributes::rendererIsNeeded):
+        * ksvg2/svg/SVGForeignObjectElement.h:
+        * ksvg2/svg/SVGGElement.h:
+        * ksvg2/svg/SVGGradientElement.h:
+        * ksvg2/svg/SVGImageElement.h:
+        * ksvg2/svg/SVGLineElement.h:
+        * ksvg2/svg/SVGMarkerElement.h:
+        * ksvg2/svg/SVGMaskElement.h:
+        * ksvg2/svg/SVGPathElement.h:
+        * ksvg2/svg/SVGPatternElement.h:
+        * ksvg2/svg/SVGPolyElement.h:
+        * ksvg2/svg/SVGRectElement.h:
+        * ksvg2/svg/SVGStopElement.h:
+        * ksvg2/svg/SVGStyledElement.cpp:
+        (WebCore::SVGStyledElement::rendererIsNeeded):
+        * ksvg2/svg/SVGStyledElement.h:
+        * ksvg2/svg/SVGSwitchElement.h:
+        * ksvg2/svg/SVGSymbolElement.h:
+        (WebCore::SVGSymbolElement::rendererIsNeeded):
+        * ksvg2/svg/SVGTRefElement.h:
+        * ksvg2/svg/SVGTSpanElement.h:
+        * ksvg2/svg/SVGTextElement.h:
+        * ksvg2/svg/SVGTitleElement.h:
+        (WebCore::SVGTitleElement::rendererIsNeeded):
+        * ksvg2/svg/SVGUseElement.h:
+        * ksvg2/svg/SVGViewElement.h:
+        (WebCore::SVGViewElement::rendererIsNeeded):
+
+2007-02-28  Rob Buis  <buis@kde.org>
+
+        Reviewed by Maciej.
+
         http://bugs.webkit.org/show_bug.cgi?id=12913
         Markers do not render in webkit when it misses markerWidth or markerHeight attribute
 
index 11ad281..7936330 100644 (file)
@@ -49,7 +49,6 @@ namespace WebCore {
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         // Derived from: 'SVGStyledElement'
-        virtual bool rendererIsNeeded(RenderStyle *style) { return StyledElement::rendererIsNeeded(style); }
         virtual RenderObject *createRenderer(RenderArena *arena, RenderStyle *style);
 
         virtual void defaultEventHandler(Event *evt);
index 9e6f991..aaf9b0a 100644 (file)
@@ -97,7 +97,6 @@ namespace WebCore {
         double getSimpleDuration(ExceptionCode&) const;
     
         virtual void parseMappedAttribute(MappedAttribute* attr);
-        virtual bool rendererIsNeeded(RenderStyle*) { return false; }
 
         virtual void closeRenderer();
 
index c6e983d..fc587f2 100644 (file)
@@ -47,7 +47,6 @@ namespace WebCore
         virtual void parseMappedAttribute(MappedAttribute* attr);
         virtual void notifyAttributeChange() const;
 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         virtual Path toPathData() const;
 
     protected:
index 3452b13..3068daf 100644 (file)
@@ -50,6 +50,8 @@ namespace WebCore
         virtual void parseMappedAttribute(MappedAttribute*);
         virtual void notifyAttributeChange() const;
 
+        virtual bool rendererIsNeeded(RenderStyle*) { return false; }
+
     protected:
         virtual const SVGElement* contextElement() const { return this; }
 
index bd1a3bf..76cb484 100644 (file)
@@ -45,11 +45,6 @@ bool SVGDefsElement::isValid() const
     return SVGTests::isValid();
 }
 
-bool SVGDefsElement::rendererIsNeeded(RenderStyle* style)
-{
-    return StyledElement::rendererIsNeeded(style);
-}
-
 RenderObject* SVGDefsElement::createRenderer(RenderArena* arena, RenderStyle* style)
 {
     return new (arena) RenderSVGHiddenContainer(this);
index 565b17b..7a3ebda 100644 (file)
@@ -42,7 +42,6 @@ namespace WebCore
         
         virtual bool isValid() const;
         
-        virtual bool rendererIsNeeded(RenderStyle*);
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
     
     protected:
index 8d0c9d5..f1d5031 100644 (file)
@@ -37,6 +37,8 @@ namespace WebCore
         virtual ~SVGDescElement();
 
         String description() const;
+
+        virtual bool rendererIsNeeded(RenderStyle*) { return false; }
     };
 
 } // namespace WebCore
index 5ce72d1..ec10d61 100644 (file)
@@ -32,6 +32,7 @@
 #include "EventNames.h"
 #include "HTMLNames.h"
 #include "PlatformString.h"
+#include "RenderObject.h"
 #include "SVGDocumentExtensions.h"
 #include "SVGElementInstance.h"
 #include "SVGNames.h"
index 522de7a..e8a5f48 100644 (file)
@@ -47,7 +47,6 @@ namespace WebCore
         virtual void parseMappedAttribute(MappedAttribute* attr);
         virtual void notifyAttributeChange() const;
 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         virtual Path toPathData() const;
 
     protected:
index 9f35cd6..6722a6f 100644 (file)
@@ -51,6 +51,8 @@ namespace WebCore {
 
         virtual void parseMappedAttribute(MappedAttribute* attr);
 
+        virtual bool rendererIsNeeded(RenderStyle*) { return false; }
+
     protected:
         virtual const SVGElement* contextElement() const { return this; }
 
index 6fbbcd2..5edddde 100644 (file)
@@ -43,6 +43,8 @@ namespace WebCore {
 
         virtual SVGFilterEffect* filterEffect() const = 0;
 
+        virtual bool rendererIsNeeded(RenderStyle*) { return false; }
+
     protected:
         void setStandardAttributes(SVGFilterEffect* filterEffect) const;
 
index 63738fd..6529c2c 100644 (file)
@@ -48,7 +48,6 @@ namespace WebCore
         virtual bool isValid() const { return SVGTests::isValid(); }
         virtual void parseMappedAttribute(MappedAttribute*);
 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         bool childShouldCreateRenderer(Node*) const;
         virtual RenderObject* createRenderer(RenderArena* arena, RenderStyle* style);
 
index 0ecb9ba..1243ba9 100644 (file)
@@ -45,7 +45,6 @@ namespace WebCore
 
         virtual void parseMappedAttribute(MappedAttribute*);
 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
 
     protected:
index 1559685..441a622 100644 (file)
@@ -51,7 +51,6 @@ namespace WebCore {
         virtual void parseMappedAttribute(MappedAttribute*);
         virtual void notifyAttributeChange() const;
         
-        virtual bool rendererIsNeeded(RenderStyle*) { return true; }
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
 
         virtual SVGResource* canvasResource();
index e2745b3..25f96c3 100644 (file)
@@ -56,7 +56,6 @@ namespace WebCore
 
         virtual void attach();
 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
         
     protected:
index aeda0fd..68c41dd 100644 (file)
@@ -48,7 +48,6 @@ namespace WebCore
         virtual void parseMappedAttribute(MappedAttribute* attr);
         virtual void notifyAttributeChange() const;
 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         virtual Path toPathData() const;
 
         virtual bool supportsMarkers() const { return true; }
index a141989..32988f7 100644 (file)
@@ -64,7 +64,6 @@ namespace WebCore
         virtual void parseMappedAttribute(MappedAttribute*);
         virtual void notifyAttributeChange() const;
 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
         virtual SVGResource* canvasResource();
 
index d6485e2..2a1aee1 100644 (file)
@@ -50,7 +50,6 @@ namespace WebCore
         virtual void parseMappedAttribute(MappedAttribute*);
         virtual void notifyAttributeChange() const;
 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
         virtual SVGResource* canvasResource();
 
index 3a2ea5d..0de0266 100644 (file)
@@ -99,7 +99,6 @@ namespace WebCore
         virtual void parseMappedAttribute(MappedAttribute* attr);
         virtual void notifyAttributeChange() const;
 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         virtual Path toPathData() const;
 
         virtual bool supportsMarkers() const { return true; }
index e6c09f8..33cbc59 100644 (file)
@@ -59,7 +59,6 @@ namespace WebCore
         virtual void parseMappedAttribute(MappedAttribute*);
         virtual void notifyAttributeChange() const;
 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
         virtual SVGResource* canvasResource();
 
index 4d3a2f6..ef7ce0c 100644 (file)
@@ -47,7 +47,6 @@ namespace WebCore
         virtual void parseMappedAttribute(MappedAttribute* attr);
         virtual void notifyAttributeChange() const;
 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         virtual Path toPathData() const;
 
     protected:
index 79bef0a..8450b0d 100644 (file)
@@ -40,7 +40,6 @@ namespace WebCore
         virtual void parseMappedAttribute(MappedAttribute*);
         virtual void notifyAttributeChange() const;
 
-        virtual bool rendererIsNeeded(RenderStyle*) { return true; }
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
         
     private:
index f8abe70..d0d89c0 100644 (file)
@@ -59,6 +59,14 @@ SVGStyledElement::~SVGStyledElement()
 
 ANIMATED_PROPERTY_DEFINITIONS(SVGStyledElement, String, String, string, ClassName, className, HTMLNames::classAttr.localName(), m_className)
 
+bool SVGStyledElement::rendererIsNeeded(RenderStyle* style)
+{
+    if (!parentNode() || parentNode()->isSVGElement())
+        return StyledElement::rendererIsNeeded(style);
+
+    return false;
+}
+
 RenderObject* SVGStyledElement::createRenderer(RenderArena* arena, RenderStyle* style)
 {
     // The path data is set upon the first layout() call.
index f475340..9690335 100644 (file)
@@ -48,7 +48,7 @@ namespace WebCore {
 
         // 'SVGStylable' functions
         // These need to be implemented.
-        virtual bool rendererIsNeeded(RenderStyle*) { return false; }
+        virtual bool rendererIsNeeded(RenderStyle*);
         virtual Path toPathData() const { return Path(); }
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
         virtual SVGResource* canvasResource() { return 0; }
index 627f723..3d56131 100644 (file)
@@ -42,7 +42,6 @@ namespace WebCore
         
         virtual bool isValid() const { return SVGTests::isValid(); }
 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         virtual bool childShouldCreateRenderer(Node*) const;
 
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
index 6d046bf..dadd945 100644 (file)
@@ -43,6 +43,8 @@ namespace WebCore
         virtual void parseMappedAttribute(MappedAttribute*);
         virtual bool shouldAttachChild(Element*) const { return false; }
     
+        virtual bool rendererIsNeeded(RenderStyle*) { return false; }
+
     protected:
         virtual const SVGElement* contextElement() const { return this; }
  
index b721475..12394c3 100644 (file)
@@ -38,7 +38,6 @@ namespace WebCore
         virtual void attributeChanged(Attribute* attr, bool preserveDecls);
         virtual void parseMappedAttribute(MappedAttribute*);
 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
         bool childShouldCreateRenderer(Node*) const;
 
index 3f68df0..5a2d8ea 100644 (file)
@@ -34,7 +34,6 @@ namespace WebCore
         SVGTSpanElement(const QualifiedName&, Document*);
         virtual ~SVGTSpanElement();
                 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
         bool childShouldCreateRenderer(Node*) const;
     
index be735cd..84f71ab 100644 (file)
@@ -46,7 +46,6 @@ namespace WebCore
         virtual AffineTransform getCTM() const;
         virtual AffineTransform getScreenCTM() const;
 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
         virtual bool childShouldCreateRenderer(Node*) const;
         virtual void attach();
index 269377d..a8e174a 100644 (file)
@@ -38,6 +38,8 @@ namespace WebCore
         virtual void insertedIntoDocument();
         virtual void removedFromDocument();
         virtual void childrenChanged();
+
+        virtual bool rendererIsNeeded(RenderStyle*) { return false; }
     };
 
 } // namespace WebCore
index 1a55a08..59dbd91 100644 (file)
@@ -60,7 +60,6 @@ namespace WebCore
         virtual void parseMappedAttribute(MappedAttribute*);
         virtual void notifyAttributeChange() const;
 
-        virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
         virtual void attach();
 
index 4ff56ad..84a2ccc 100644 (file)
@@ -46,6 +46,8 @@ namespace WebCore
         // 'SVGViewElement' functions
         SVGStringList *viewTarget() const;
 
+        virtual bool rendererIsNeeded(RenderStyle*) { return false; }
+
     protected:
         virtual const SVGElement* contextElement() const { return this; }