Add covariant RenderElement* Element::renderer()
authorantti@apple.com <antti@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 20 Sep 2013 08:59:25 +0000 (08:59 +0000)
committerantti@apple.com <antti@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 20 Sep 2013 08:59:25 +0000 (08:59 +0000)
https://bugs.webkit.org/show_bug.cgi?id=121638

Reviewed by Andreas Kling.

Also add isRenderElement() test and casting functions.

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

22 files changed:
Source/WebCore/ChangeLog
Source/WebCore/accessibility/AccessibilityScrollView.cpp
Source/WebCore/accessibility/AccessibilitySpinButton.cpp
Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceTable.cpp
Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm
Source/WebCore/bridge/qt/qt_pixmapruntime.cpp
Source/WebCore/css/SelectorChecker.cpp
Source/WebCore/dom/ContainerNode.h
Source/WebCore/dom/Element.h
Source/WebCore/dom/PseudoElement.cpp
Source/WebCore/editing/SplitTextNodeContainingElementCommand.cpp
Source/WebCore/editing/TypingCommand.cpp
Source/WebCore/html/ImageDocument.cpp
Source/WebCore/loader/cache/CachedResourceLoader.cpp
Source/WebCore/page/PageSerializer.cpp
Source/WebCore/plugins/gtk/PluginViewGtk.cpp
Source/WebCore/rendering/RenderElement.h
Source/WebCore/rendering/RenderObject.h
Source/WebCore/svg/SVGAnimatedColor.cpp
Source/WebCore/svg/SVGLocatable.cpp
Source/WebCore/svg/graphics/filters/SVGFEImage.cpp
Source/WebCore/svg/graphics/filters/SVGFEImage.h

index 39a35bc..3d5ae58 100644 (file)
@@ -1,3 +1,12 @@
+2013-09-20  Antti Koivisto  <antti@apple.com>
+
+        Add covariant RenderElement* Element::renderer()
+        https://bugs.webkit.org/show_bug.cgi?id=121638
+
+        Reviewed by Andreas Kling.
+
+        Also add isRenderElement() test and casting functions.
+
 2013-09-19  Anders Carlsson  <andersca@apple.com>
 
         Handle null font families.
index 69d42f3..cf039d6 100644 (file)
@@ -31,6 +31,7 @@
 #include "Frame.h"
 #include "FrameView.h"
 #include "HTMLFrameOwnerElement.h"
+#include "RenderElement.h"
 #include "ScrollView.h"
 #include "Widget.h"
 
index 46a1828..26af7b7 100644 (file)
@@ -27,7 +27,7 @@
 #include "AccessibilitySpinButton.h"
 
 #include "AXObjectCache.h"
-#include "RenderObject.h"
+#include "RenderElement.h"
 
 namespace WebCore {
 
index 6684745..275f34b 100644 (file)
@@ -40,7 +40,7 @@
 #include "HTMLSelectElement.h"
 #include "HTMLTableCaptionElement.h"
 #include "HTMLTableElement.h"
-#include "RenderObject.h"
+#include "RenderElement.h"
 #include "WebKitAccessibleInterfaceText.h"
 #include "WebKitAccessibleWrapperAtk.h"
 
@@ -215,7 +215,7 @@ static AtkObject* webkitAccessibleTableGetCaption(AtkTable* table)
         if (node && isHTMLTableElement(node)) {
             HTMLTableCaptionElement* caption = toHTMLTableElement(node)->caption();
             if (caption)
-                return AccessibilityObject::firstAccessibleObjectFromNode(caption->renderer()->node())->wrapper();
+                return AccessibilityObject::firstAccessibleObjectFromNode(caption->renderer()->element())->wrapper();
         }
     }
     return 0;
index f5f9055..8d66fd8 100644 (file)
@@ -1289,7 +1289,7 @@ sub GenerateImplementation
                     unless ($interfaceName eq "HTMLImageElement") {
                         push(@customGetterContent, "    if (!IMPL->renderer() || !IMPL->renderer()->isImage())\n");
                         push(@customGetterContent, "        return nil;\n");
-                        $implIncludes{"RenderObject.h"} = 1;
+                        $implIncludes{"RenderElement.h"} = 1;
                     }
                 }
                 $implIncludes{"DOMPrivate.h"} = 1;
index d51fc3a..7a8a2f7 100644 (file)
@@ -30,6 +30,7 @@
 #include "JSImageData.h"
 #include "JSRetainPtr.h"
 #include "JavaScript.h"
+#include "RenderElement.h"
 #include "StillImageQt.h"
 #include <QBuffer>
 #include <QByteArray>
index 82aaf09..6689a1e 100644 (file)
@@ -48,7 +48,7 @@
 #include "InspectorInstrumentation.h"
 #include "NodeRenderStyle.h"
 #include "Page.h"
-#include "RenderObject.h"
+#include "RenderElement.h"
 #include "RenderScrollbar.h"
 #include "RenderStyle.h"
 #include "ScrollableArea.h"
index d55079d..dfcf4ee 100644 (file)
@@ -33,7 +33,7 @@
 namespace WebCore {
 
 class FloatPoint;
-    
+
 typedef void (*NodeCallback)(Node*, unsigned);
 
 namespace Private { 
index 55a8e18..6a5f9b4 100644 (file)
@@ -44,6 +44,7 @@ class HTMLDocument;
 class IntSize;
 class Locale;
 class PseudoElement;
+class RenderElement;
 class RenderRegion;
 class ShadowRoot;
 
@@ -127,6 +128,8 @@ public:
     DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitfullscreenerror);
 #endif
 
+    RenderElement* renderer() const;
+
     bool hasAttribute(const QualifiedName&) const;
     const AtomicString& getAttribute(const QualifiedName&) const;
     void setAttribute(const QualifiedName&, const AtomicString& value);
index 4d65dbf..a63b973 100644 (file)
@@ -29,7 +29,7 @@
 
 #include "ContentData.h"
 #include "InspectorInstrumentation.h"
-#include "RenderObject.h"
+#include "RenderElement.h"
 #include "RenderQuote.h"
 
 namespace WebCore {
@@ -78,7 +78,7 @@ PassRefPtr<RenderStyle> PseudoElement::customStyleForRenderer()
 
 void PseudoElement::didAttachRenderers()
 {
-    RenderObject* renderer = this->renderer();
+    RenderElement* renderer = this->renderer();
     if (!renderer || !renderer->style()->regionThread().isEmpty())
         return;
 
index 105bbc5..53fd7d6 100644 (file)
@@ -27,8 +27,8 @@
 #include "SplitTextNodeContainingElementCommand.h"
 
 #include "Element.h"
+#include "RenderElement.h"
 #include "Text.h"
-#include "RenderObject.h"
 #include <wtf/Assertions.h>
 
 namespace WebCore {
@@ -53,7 +53,7 @@ void SplitTextNodeContainingElementCommand::doApply()
     if (!parent || !parent->parentElement() || !parent->parentElement()->rendererIsEditable())
         return;
 
-    RenderObject* parentRenderer = parent->renderer();
+    RenderElement* parentRenderer = parent->renderer();
     if (!parentRenderer || !parentRenderer->isInline()) {
         wrapContentsInDummySpan(parent);
         Node* firstChild = parent->firstChild();
index c16ed04..7381296 100644 (file)
@@ -37,7 +37,7 @@
 #include "InsertLineBreakCommand.h"
 #include "InsertParagraphSeparatorCommand.h"
 #include "InsertTextCommand.h"
-#include "RenderObject.h"
+#include "RenderElement.h"
 #include "TextIterator.h"
 #include "VisiblePosition.h"
 #include "VisibleUnits.h"
index 73ffdef..daea01e 100644 (file)
@@ -42,6 +42,7 @@
 #include "NotImplemented.h"
 #include "Page.h"
 #include "RawDataDocumentParser.h"
+#include "RenderElement.h"
 #include "ResourceBuffer.h"
 #include "Settings.h"
 
index 2fe976a..3463786 100644 (file)
@@ -50,6 +50,7 @@
 #include "MemoryCache.h"
 #include "PingLoader.h"
 #include "PlatformStrategies.h"
+#include "RenderElement.h"
 #include "ResourceLoadScheduler.h"
 #include "ScriptController.h"
 #include "SecurityOrigin.h"
index 024fbf3..9b90fcb 100644 (file)
@@ -50,6 +50,7 @@
 #include "MIMETypeRegistry.h"
 #include "MarkupAccumulator.h"
 #include "Page.h"
+#include "RenderElement.h"
 #include "StyleCachedImage.h"
 #include "StyleImage.h"
 #include "StylePropertySet.h"
index 862cf70..0bbbee3 100644 (file)
@@ -58,7 +58,7 @@
 #include "PluginDebug.h"
 #include "PluginMainThreadScheduler.h"
 #include "PluginPackage.h"
-#include "RenderObject.h"
+#include "RenderElement.h"
 #include "Settings.h"
 #include "SpatialNavigation.h"
 #include "npruntime_impl.h"
index 45e5025..df7ccee 100644 (file)
@@ -47,6 +47,39 @@ private:
     void generatingNode() const WTF_DELETED_FUNCTION;
 };
 
+inline RenderElement& toRenderElement(RenderObject& object)
+{
+    ASSERT_WITH_SECURITY_IMPLICATION(object.isRenderElement());
+    return static_cast<RenderElement&>(object);
+}
+
+inline const RenderElement& toRenderElement(const RenderObject& object)
+{
+    ASSERT_WITH_SECURITY_IMPLICATION(object.isRenderElement());
+    return static_cast<const RenderElement&>(object);
+}
+
+inline RenderElement* toRenderElement(RenderObject* object)
+{
+    ASSERT_WITH_SECURITY_IMPLICATION(!object || object->isRenderElement());
+    return static_cast<RenderElement*>(object);
+}
+
+inline const RenderElement* toRenderElement(const RenderObject* object)
+{
+    ASSERT_WITH_SECURITY_IMPLICATION(!object || object->isRenderElement());
+    return static_cast<const RenderElement*>(object);
+}
+
+// This will catch anyone doing an unnecessary cast.
+void toRenderElement(const RenderElement*);
+void toRenderElement(const RenderElement&);
+
+inline RenderElement* Element::renderer() const
+{
+    return toRenderElement(Node::renderer());
+}
+
 } // namespace WebCore
 
 #endif // RenderElement_h
index f3c8b37..ed818ac 100644 (file)
@@ -342,6 +342,7 @@ public:
 
     bool isPseudoElement() const { return node() && node()->isPseudoElement(); }
 
+    bool isRenderElement() const { return !isText(); }
     virtual bool isBoxModelObject() const { return false; }
     virtual bool isCounter() const { return false; }
     virtual bool isQuote() const { return false; }
index 832c2a2..28160a1 100644 (file)
@@ -23,7 +23,7 @@
 #include "SVGAnimatedColor.h"
 
 #include "ColorDistance.h"
-#include "RenderObject.h"
+#include "RenderElement.h"
 #include "SVGAnimateElement.h"
 #include "SVGColor.h"
 
@@ -52,7 +52,7 @@ static inline void adjustForCurrentColor(SVGElement* targetElement, Color& color
 {
     ASSERT(targetElement);
 
-    if (RenderObject* targetRenderer = targetElement->renderer())
+    if (RenderElement* targetRenderer = targetElement->renderer())
         color = targetRenderer->style()->visitedDependentColor(CSSPropertyColor);
     else
         color = Color();
index d87a3f3..cad52c8 100644 (file)
@@ -25,7 +25,7 @@
 #if ENABLE(SVG)
 #include "SVGLocatable.h"
 
-#include "RenderObject.h"
+#include "RenderElement.h"
 #include "SVGException.h"
 #include "SVGGraphicsElement.h"
 #include "SVGImageElement.h"
index 57b8545..0e7a7e1 100644 (file)
@@ -28,7 +28,7 @@
 #include "AffineTransform.h"
 #include "Filter.h"
 #include "GraphicsContext.h"
-#include "RenderObject.h"
+#include "RenderElement.h"
 #include "RenderTreeAsText.h"
 #include "SVGElement.h"
 #include "SVGFilter.h"
@@ -74,7 +74,7 @@ void FEImage::determineAbsolutePaintRect()
     if (m_image) {
         srcRect.setSize(m_image->size());
         m_preserveAspectRatio.transformRect(paintRect, srcRect);
-    } else if (RenderObject* renderer = referencedRenderer())
+    } else if (RenderElement* renderer = referencedRenderer())
         srcRect = svgFilter->absoluteTransform().mapRect(renderer->repaintRectInLocalCoordinates());
 
     if (clipsToBounds())
@@ -84,7 +84,7 @@ void FEImage::determineAbsolutePaintRect()
     setAbsolutePaintRect(enclosingIntRect(paintRect));
 }
 
-RenderObject* FEImage::referencedRenderer() const
+RenderElement* FEImage::referencedRenderer() const
 {
     if (!m_document)
         return 0;
index 46a853c..8571981 100644 (file)
@@ -31,7 +31,7 @@ namespace WebCore {
 
 class Document;
 class Image;
-class RenderObject;
+class RenderElement;
 
 class FEImage : public FilterEffect {
 public:
@@ -54,7 +54,7 @@ private:
     virtual ~FEImage() { }
     FEImage(Filter*, PassRefPtr<Image>, const SVGPreserveAspectRatio&);
     FEImage(Filter*, Document*, const String&, const SVGPreserveAspectRatio&);
-    RenderObject* referencedRenderer() const;
+    RenderElement* referencedRenderer() const;
 
     RefPtr<Image> m_image;