RenderElement::isChildAllowed() should take const references.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 16 Oct 2013 09:34:35 +0000 (09:34 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 16 Oct 2013 09:34:35 +0000 (09:34 +0000)
<https://webkit.org/b/122870>

Reviewed by Anders Carlsson.

The isChildAllowed() functions expect non-null values to be passed,
so enforce this at compile-time.

Reordered some checks to do bit tests before virtual calls.

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

26 files changed:
Source/WebCore/ChangeLog
Source/WebCore/dom/PseudoElement.cpp
Source/WebCore/rendering/RenderElement.h
Source/WebCore/rendering/RenderFrameSet.cpp
Source/WebCore/rendering/RenderFrameSet.h
Source/WebCore/rendering/RenderFullScreen.cpp
Source/WebCore/rendering/RenderNamedFlowThread.cpp
Source/WebCore/rendering/RenderNamedFlowThread.h
Source/WebCore/rendering/RenderRubyBase.cpp
Source/WebCore/rendering/RenderRubyBase.h
Source/WebCore/rendering/RenderRubyRun.cpp
Source/WebCore/rendering/RenderRubyRun.h
Source/WebCore/rendering/RenderRubyText.cpp
Source/WebCore/rendering/RenderRubyText.h
Source/WebCore/rendering/RenderTableCol.cpp
Source/WebCore/rendering/RenderTableCol.h
Source/WebCore/rendering/RenderView.cpp
Source/WebCore/rendering/RenderView.h
Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp
Source/WebCore/rendering/mathml/RenderMathMLBlock.h
Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp
Source/WebCore/rendering/mathml/RenderMathMLOperator.h
Source/WebCore/rendering/mathml/RenderMathMLSpace.h
Source/WebCore/rendering/svg/RenderSVGText.cpp
Source/WebCore/rendering/svg/RenderSVGText.h
Source/WebCore/style/StyleResolveTree.cpp

index a318227..a54719d 100644 (file)
@@ -1,3 +1,15 @@
+2013-10-16  Andreas Kling  <akling@apple.com>
+
+        RenderElement::isChildAllowed() should take const references.
+        <https://webkit.org/b/122870>
+
+        Reviewed by Anders Carlsson.
+
+        The isChildAllowed() functions expect non-null values to be passed,
+        so enforce this at compile-time.
+
+        Reordered some checks to do bit tests before virtual calls.
+
 2013-10-15  Philippe Normand  <pnormand@igalia.com>
 
         [GStreamer] video info unset if upstream doesn't query allocation
index a573dcc..ed23eb7 100644 (file)
@@ -88,7 +88,7 @@ void PseudoElement::didAttachRenderers()
 
     for (const ContentData* content = style->contentData(); content; content = content->next()) {
         RenderObject* child = content->createRenderer(document(), *style);
-        if (renderer->isChildAllowed(child, style)) {
+        if (renderer->isChildAllowed(*child, *style)) {
             renderer->addChild(child);
             if (child->isQuote())
                 toRenderQuote(child)->attachQuote();
index 4ac1e61..20bd4d8 100644 (file)
@@ -56,7 +56,7 @@ public:
     bool isRenderReplaced() const;
     bool isRenderInline() const;
 
-    virtual bool isChildAllowed(RenderObject*, RenderStyle*) const { return true; }
+    virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const { return true; }
     virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0);
     virtual void addChildIgnoringContinuation(RenderObject* newChild, RenderObject* beforeChild = 0) { return addChild(newChild, beforeChild); }
     virtual void removeChild(RenderObject*);
index 58cc0dc..2e5db0c 100644 (file)
@@ -776,9 +776,9 @@ int RenderFrameSet::hitTestSplit(const GridAxis& axis, int position) const
     return noSplit;
 }
 
-bool RenderFrameSet::isChildAllowed(RenderObject* child, RenderStyle*) const
+bool RenderFrameSet::isChildAllowed(const RenderObject& child, const RenderStyle&) const
 {
-    return child->isFrame() || child->isFrameSet();
+    return child.isFrame() || child.isFrameSet();
 }
 
 CursorDirective RenderFrameSet::getCursor(const LayoutPoint& point, Cursor& cursor) const
index d44faed..e6ed3c3 100644 (file)
@@ -97,7 +97,7 @@ private:
     virtual void layout() OVERRIDE;
     virtual void paint(PaintInfo&, const LayoutPoint&) OVERRIDE;
     virtual bool canHaveChildren() const OVERRIDE { return true; }
-    virtual bool isChildAllowed(RenderObject*, RenderStyle*) const OVERRIDE;
+    virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const OVERRIDE;
     virtual CursorDirective getCursor(const LayoutPoint&, Cursor&) const OVERRIDE;
 
     bool flattenFrameSet() const;
index 16e96a7..dcddc31 100644 (file)
@@ -111,7 +111,7 @@ RenderFullScreen* RenderFullScreen::wrapRenderer(RenderObject* object, RenderEle
 {
     RenderFullScreen* fullscreenRenderer = new (*document.renderArena()) RenderFullScreen(document);
     fullscreenRenderer->setStyle(createFullScreenStyle());
-    if (parent && !parent->isChildAllowed(fullscreenRenderer, fullscreenRenderer->style())) {
+    if (parent && !parent->isChildAllowed(*fullscreenRenderer, *fullscreenRenderer->style())) {
         fullscreenRenderer->destroy();
         return 0;
     }
index dd13bde..2f260ab 100644 (file)
@@ -476,14 +476,14 @@ const AtomicString& RenderNamedFlowThread::flowThreadName() const
     return m_namedFlow->name();
 }
 
-bool RenderNamedFlowThread::isChildAllowed(RenderObject* child, RenderStyle* style) const
+bool RenderNamedFlowThread::isChildAllowed(const RenderObject& child, const RenderStyle& style) const
 {
-    if (!child->node())
+    if (!child.node())
         return true;
 
-    ASSERT(child->node()->isElementNode());
+    ASSERT(child.node()->isElementNode());
 
-    Node* originalParent = NodeRenderingTraversal::parent(child->node());
+    Node* originalParent = NodeRenderingTraversal::parent(child.node());
     if (!originalParent || !originalParent->isElementNode() || !originalParent->renderer())
         return true;
 
index 06012ab..b102ff2 100644 (file)
@@ -87,7 +87,7 @@ protected:
 private:
     virtual const char* renderName() const OVERRIDE;
     virtual bool isRenderNamedFlowThread() const OVERRIDE { return true; }
-    virtual bool isChildAllowed(RenderObject*, RenderStyle*) const OVERRIDE;
+    virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const OVERRIDE;
 
     virtual void dispatchRegionLayoutUpdateEvent() OVERRIDE;
     virtual void dispatchRegionOversetChangeEvent() OVERRIDE;
index 34a12be..9edf67e 100644 (file)
@@ -48,9 +48,9 @@ RenderRubyBase::~RenderRubyBase()
 {
 }
 
-bool RenderRubyBase::isChildAllowed(RenderObject* child, RenderStyle*) const
+bool RenderRubyBase::isChildAllowed(const RenderObject& child, const RenderStyle&) const
 {
-    return child->isInline();
+    return child.isInline();
 }
 
 void RenderRubyBase::moveChildren(RenderRubyBase* toBase, RenderObject* beforeChild)
index eea9c54..ffeabea 100644 (file)
@@ -46,9 +46,8 @@ public:
 
     virtual bool isRubyBase() const { return true; }
 
-    virtual bool isChildAllowed(RenderObject*, RenderStyle*) const;
-
 private:
+    virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const;
     virtual ETextAlign textAlignmentForLine(bool endsWithSoftBreak) const;
     virtual void adjustInlineDirectionLineBounds(int expansionOpportunityCount, float& logicalLeft, float& logicalWidth) const;
 
index 8714f4e..58e39bf 100644 (file)
@@ -107,9 +107,9 @@ void RenderRubyRun::updateFirstLetter()
 {
 }
 
-bool RenderRubyRun::isChildAllowed(RenderObject* child, RenderStyle*) const
+bool RenderRubyRun::isChildAllowed(const RenderObject& child, const RenderStyle&) const
 {
-    return child->isRubyText() || child->isInline();
+    return child.isInline() || child.isRubyText();
 }
 
 void RenderRubyRun::addChild(RenderObject* child, RenderObject* beforeChild)
index d7652a3..167d3a9 100644 (file)
@@ -56,7 +56,7 @@ public:
     virtual RenderObject* layoutSpecialExcludedChild(bool relayoutChildren);
     virtual void layout();
 
-    virtual bool isChildAllowed(RenderObject*, RenderStyle*) const;
+    virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const;
     virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0);
     virtual void removeChild(RenderObject* child);
 
index 59dd39f..d7b6bb8 100644 (file)
@@ -46,9 +46,9 @@ RenderRubyText::~RenderRubyText()
 {
 }
 
-bool RenderRubyText::isChildAllowed(RenderObject* child, RenderStyle*) const
+bool RenderRubyText::isChildAllowed(const RenderObject& child, const RenderStyle&) const
 {
-    return child->isInline();
+    return child.isInline();
 }
 
 ETextAlign RenderRubyText::textAlignmentForLine(bool endsWithSoftBreak) const
index dc1fd0d..e93f9e7 100644 (file)
@@ -42,7 +42,7 @@ public:
 
     Element& element() const { return toElement(nodeForNonAnonymous()); }
 
-    virtual bool isChildAllowed(RenderObject*, RenderStyle*) const OVERRIDE;
+    virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const OVERRIDE;
 
 private:
     virtual const char* renderName() const OVERRIDE { return "RenderRubyText"; }
index e73bffe..7b5f407 100644 (file)
@@ -80,10 +80,10 @@ void RenderTableCol::willBeRemovedFromTree()
     table()->removeColumn(this);
 }
 
-bool RenderTableCol::isChildAllowed(RenderObject* child, RenderStyle* style) const
+bool RenderTableCol::isChildAllowed(const RenderObject& child, const RenderStyle& style) const
 {
     // We cannot use isTableColumn here as style() may return 0.
-    return child->isRenderTableCol() && style->display() == TABLE_COLUMN;
+    return style.display() == TABLE_COLUMN && child.isRenderTableCol();
 }
 
 bool RenderTableCol::canHaveChildren() const
index 2832575..b3672f6 100644 (file)
@@ -80,7 +80,7 @@ private:
     virtual void insertedIntoTree() OVERRIDE;
     virtual void willBeRemovedFromTree() OVERRIDE;
 
-    virtual bool isChildAllowed(RenderObject*, RenderStyle*) const OVERRIDE;
+    virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const OVERRIDE;
     virtual bool canHaveChildren() const OVERRIDE;
     virtual bool requiresLayer() const OVERRIDE { return false; }
 
index be6b01f..2e36fdd 100644 (file)
@@ -138,9 +138,9 @@ LayoutUnit RenderView::availableLogicalHeight(AvailableLogicalHeightType) const
     return isHorizontalWritingMode() ? frameView().visibleHeight() : frameView().visibleWidth();
 }
 
-bool RenderView::isChildAllowed(RenderObject* child, RenderStyle*) const
+bool RenderView::isChildAllowed(const RenderObject& child, const RenderStyle&) const
 {
-    return child->isBox();
+    return child.isBox();
 }
 
 void RenderView::layoutContent(const LayoutState& state)
index cb93367..5696bf1 100644 (file)
@@ -54,7 +54,7 @@ public:
 
     virtual bool requiresLayer() const OVERRIDE { return true; }
 
-    virtual bool isChildAllowed(RenderObject*, RenderStyle*) const OVERRIDE;
+    virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const OVERRIDE;
 
     virtual void layout() OVERRIDE;
     virtual void updateLogicalWidth() OVERRIDE;
index 29afcd1..58f91ac 100644 (file)
@@ -55,9 +55,9 @@ RenderMathMLBlock::RenderMathMLBlock(Document& document)
 {
 }
 
-bool RenderMathMLBlock::isChildAllowed(RenderObject* child, RenderStyle*) const
+bool RenderMathMLBlock::isChildAllowed(const RenderObject& child, const RenderStyle&) const
 {
-    return child->node() && child->node()->nodeType() == Node::ELEMENT_NODE;
+    return child.node() && isElement(*child.node());
 }
 
 RenderMathMLBlock* RenderMathMLBlock::createAnonymousMathMLBlock(EDisplay display)
index 4c40069..3be6d69 100644 (file)
@@ -44,7 +44,7 @@ public:
     explicit RenderMathMLBlock(Element&);
     explicit RenderMathMLBlock(Document&);
 
-    virtual bool isChildAllowed(RenderObject*, RenderStyle*) const OVERRIDE;
+    virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const OVERRIDE;
     
     virtual bool isRenderMathMLBlock() const OVERRIDE { return true; }
     virtual bool isRenderMathMLOperator() const { return false; }
index 418398d..0d086bb 100644 (file)
@@ -80,7 +80,7 @@ RenderMathMLOperator::RenderMathMLOperator(Element& element, UChar operatorChar)
 {
 }
 
-bool RenderMathMLOperator::isChildAllowed(RenderObject*, RenderStyle*) const
+bool RenderMathMLOperator::isChildAllowed(const RenderObject&, const RenderStyle&) const
 {
     return false;
 }
index da502d7..be0c5e8 100644 (file)
@@ -40,7 +40,7 @@ public:
 
     virtual bool isRenderMathMLOperator() const OVERRIDE { return true; }
     
-    virtual bool isChildAllowed(RenderObject*, RenderStyle*) const OVERRIDE;
+    virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const OVERRIDE;
     virtual void updateFromElement() OVERRIDE;
     virtual void computePreferredLogicalWidths() OVERRIDE;
     virtual void computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop, LogicalExtentComputedValues&) const OVERRIDE;
index cbf2e98..f7a5490 100644 (file)
@@ -46,7 +46,7 @@ private:
 
     virtual bool isRenderMathMLSpace() const OVERRIDE { return true; }
 
-    virtual bool isChildAllowed(RenderObject*, RenderStyle*) const OVERRIDE { return false; } 
+    virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const OVERRIDE { return false; }
     virtual void computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const OVERRIDE;
 
     virtual void updateFromElement() OVERRIDE;
index 6e500c7..afcc4ae 100644 (file)
@@ -75,9 +75,9 @@ SVGTextElement& RenderSVGText::textElement() const
     return toSVGTextElement(RenderSVGBlock::graphicsElement());
 }
 
-bool RenderSVGText::isChildAllowed(RenderObject* child, RenderStyle*) const
+bool RenderSVGText::isChildAllowed(const RenderObject& child, const RenderStyle&) const
 {
-    return child->isInline();
+    return child.isInline();
 }
 
 RenderSVGText* RenderSVGText::locateRenderSVGTextAncestor(RenderObject* start)
index ecac3c5..425040b 100644 (file)
@@ -40,7 +40,7 @@ public:
 
     SVGTextElement& textElement() const;
 
-    virtual bool isChildAllowed(RenderObject*, RenderStyle*) const;
+    virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const;
 
     void setNeedsPositioningValuesUpdate() { m_needsPositioningValuesUpdate = true; }
     virtual void setNeedsTransformUpdate() { m_needsTransformUpdate = true; }
index f1d4643..5ce9f3a 100644 (file)
@@ -235,7 +235,7 @@ static void createRendererIfNeeded(Element& element, PassRefPtr<RenderStyle> res
     RenderElement* newRenderer = element.createRenderer(*document.renderArena(), *style);
     if (!newRenderer)
         return;
-    if (!parentRenderer->isChildAllowed(newRenderer, style.get())) {
+    if (!parentRenderer->isChildAllowed(*newRenderer, *style)) {
         newRenderer->destroy();
         return;
     }
@@ -374,7 +374,7 @@ static void createTextRendererIfNeeded(Text& textNode)
     RenderText* newRenderer = textNode.createTextRenderer(*document.renderArena(), *style);
     if (!newRenderer)
         return;
-    if (!parentRenderer->isChildAllowed(newRenderer, style.get())) {
+    if (!parentRenderer->isChildAllowed(*newRenderer, *style)) {
         newRenderer->destroy();
         return;
     }