Make renderer constructors take Element where possible
https://bugs.webkit.org/show_bug.cgi?id=107138

Reviewed by David Hyatt.
        
Tighter typing prevents bugs and enables optimizations.

The patch changes how anonymous rendererer are constructed. Previously Document* as the node parameter
indicated that the renderer was anonymous. This forced the code to operate on ContainerNodes (Document
is not an Element). Now anonymous renderers are constructed by passing null and the document is set by
separate setDocumentForAnonymous() call. The patch uses RenderFoo::createAnonymous() pattern consistently.

Most constructors are switched to take Element. RenderBlock still takes ContainerNode due to a few subclasses
(RenderView and RenderFlowThread) that pass in a Document.

* page/FrameView.cpp:
(WebCore::FrameView::updateScrollCorner):
* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::createAnonymous):
(WebCore::RenderBlock::createReplacementRunIn):
(WebCore::RenderBlock::updateFirstLetterStyle):
(WebCore::RenderBlock::createFirstLetterRenderer):
(WebCore::RenderBlock::createAnonymousWithParentRendererAndDisplay):
(WebCore::RenderBlock::createAnonymousColumnsWithParentRenderer):
(WebCore::RenderBlock::createAnonymousColumnSpanWithParentRenderer):
* rendering/RenderBlock.h:
* rendering/RenderDeprecatedFlexibleBox.cpp:
(WebCore::RenderDeprecatedFlexibleBox::RenderDeprecatedFlexibleBox):
(WebCore::RenderDeprecatedFlexibleBox::createAnonymous):
* rendering/RenderDeprecatedFlexibleBox.h:
(RenderDeprecatedFlexibleBox):
* rendering/RenderDetailsMarker.cpp:
(WebCore::RenderDetailsMarker::RenderDetailsMarker):
* rendering/RenderDetailsMarker.h:
(RenderDetailsMarker):
* rendering/RenderDialog.h:
(WebCore::RenderDialog::RenderDialog):
* rendering/RenderFieldset.cpp:
(WebCore::RenderFieldset::RenderFieldset):
* rendering/RenderFieldset.h:
* rendering/RenderFlexibleBox.cpp:
(WebCore::RenderFlexibleBox::RenderFlexibleBox):
* rendering/RenderFlexibleBox.h:
(RenderFlexibleBox):
* rendering/RenderFlowThread.cpp:
(WebCore::RenderFlowThread::RenderFlowThread):
* rendering/RenderFlowThread.h:
* rendering/RenderFullScreen.cpp:
(RenderFullScreenPlaceholder::RenderFullScreenPlaceholder):
(RenderFullScreen::RenderFullScreen):
(RenderFullScreen::createAnonymous):
(RenderFullScreen::wrapRenderer):
* rendering/RenderFullScreen.h:
(RenderFullScreen):
* rendering/RenderGrid.cpp:
(WebCore::RenderGrid::RenderGrid):
* rendering/RenderGrid.h:
* rendering/RenderImage.cpp:
(WebCore::RenderImage::RenderImage):
(WebCore::RenderImage::createAnonymous):
* rendering/RenderImage.h:
* rendering/RenderInline.cpp:
(WebCore::RenderInline::RenderInline):
(WebCore::RenderInline::createAnonymous):
(WebCore::RenderInline::addChildIgnoringContinuation):
* rendering/RenderInline.h:
(RenderInline):
(WebCore::RenderInline::node):
        
    Add version with covariant Element return type.

* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::updateScrollCornerStyle):
(WebCore::RenderLayer::updateResizerStyle):
(WebCore::RenderLayer::createReflection):
(WebCore::RenderListItem::RenderListItem):
(WebCore::RenderListItem::styleDidChange):
* rendering/RenderListItem.h:
* rendering/RenderListMarker.cpp:
(WebCore::RenderListMarker::RenderListMarker):
(WebCore::RenderListMarker::createAnonymous):
* rendering/RenderListMarker.h:
* rendering/RenderMediaControlElements.cpp:
(WebCore::RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer):
(WebCore::RenderMediaControlTimeDisplay::RenderMediaControlTimeDisplay):
(WebCore::RenderTextTrackContainerElement::RenderTextTrackContainerElement):
* rendering/RenderMediaControlElements.h:
(RenderMediaVolumeSliderContainer):
(RenderMediaControlTimeDisplay):
(RenderTextTrackContainerElement):
* rendering/RenderMultiColumnBlock.cpp:
(WebCore::RenderMultiColumnBlock::RenderMultiColumnBlock):
(WebCore::RenderMultiColumnBlock::ensureColumnSets):
* rendering/RenderMultiColumnBlock.h:
* rendering/RenderMultiColumnFlowThread.cpp:
(WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
* rendering/RenderMultiColumnFlowThread.h:
(RenderMultiColumnFlowThread):
* rendering/RenderMultiColumnSet.cpp:
(WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
(WebCore::RenderMultiColumnSet::createAnonymous):
* rendering/RenderMultiColumnSet.h:
(RenderMultiColumnSet):
* rendering/RenderNamedFlowThread.cpp:
(WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
* rendering/RenderNamedFlowThread.h:
(RenderNamedFlowThread):
* rendering/RenderObject.cpp:
(WebCore::RenderObject::RenderObject):
* rendering/RenderObject.h:
        
     Passed in null node indicates that the renderer is anonymous. Remove now unnecessary setIsAnonymous() function.

(WebCore::RenderObject::isAnonymous):
(WebCore::RenderObject::setDocumentForAnonymous):
(WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
* rendering/RenderRegion.cpp:
(WebCore::RenderRegion::RenderRegion):
* rendering/RenderRegion.h:
* rendering/RenderRegionSet.cpp:
(WebCore::RenderRegionSet::RenderRegionSet):
* rendering/RenderRegionSet.h:
* rendering/RenderReplaced.cpp:
(WebCore::RenderReplaced::RenderReplaced):
* rendering/RenderReplaced.h:
* rendering/RenderReplica.cpp:
(WebCore::RenderReplica::RenderReplica):
(WebCore::RenderReplica::createAnonymous):
* rendering/RenderReplica.h:
(RenderReplica):
* rendering/RenderRuby.cpp:
(WebCore::createAnonymousRubyInlineBlock):
(WebCore::RenderRubyAsInline::RenderRubyAsInline):
(WebCore::RenderRubyAsBlock::RenderRubyAsBlock):
* rendering/RenderRuby.h:
(RenderRubyAsInline):
(RenderRubyAsBlock):
* rendering/RenderRubyBase.cpp:
(WebCore::RenderRubyBase::RenderRubyBase):
(WebCore::RenderRubyBase::createAnonymous):
* rendering/RenderRubyBase.h:
(RenderRubyBase):
* rendering/RenderRubyRun.cpp:
(WebCore::RenderRubyRun::RenderRubyRun):
(WebCore::RenderRubyRun::createRubyBase):
(WebCore::RenderRubyRun::staticCreateRubyRun):
* rendering/RenderRubyRun.h:
* rendering/RenderRubyText.cpp:
(WebCore::RenderRubyText::RenderRubyText):
* rendering/RenderRubyText.h:
* rendering/RenderScrollbar.cpp:
(WebCore::RenderScrollbar::updateScrollbarPart):
* rendering/RenderScrollbarPart.cpp:
(WebCore::RenderScrollbarPart::RenderScrollbarPart):
(WebCore::RenderScrollbarPart::createAnonymous):
* rendering/RenderScrollbarPart.h:
(RenderScrollbarPart):
* rendering/RenderSearchField.cpp:
(WebCore::RenderSearchField::RenderSearchField):
* rendering/RenderSearchField.h:
(RenderSearchField):
* rendering/RenderTable.cpp:
(WebCore::RenderTable::RenderTable):
(WebCore::RenderTable::createAnonymousWithParentRenderer):
* rendering/RenderTable.h:
* rendering/RenderTableCaption.cpp:
(WebCore::RenderTableCaption::RenderTableCaption):
* rendering/RenderTableCaption.h:
* rendering/RenderTableCell.cpp:
(WebCore::RenderTableCell::RenderTableCell):
(WebCore::RenderTableCell::createAnonymousWithParentRenderer):
* rendering/RenderTableCell.h:
* rendering/RenderTableCol.cpp:
(WebCore::RenderTableCol::RenderTableCol):
* rendering/RenderTableCol.h:
* rendering/RenderTableRow.cpp:
(WebCore::RenderTableRow::RenderTableRow):
(WebCore::RenderTableRow::createAnonymousWithParentRenderer):
* rendering/RenderTableRow.h:
* rendering/RenderTableSection.cpp:
(WebCore::RenderTableSection::RenderTableSection):
(WebCore::RenderTableSection::createAnonymousWithParentRenderer):
* rendering/RenderTableSection.h:
* rendering/RenderText.cpp:
(WebCore::RenderText::RenderText):
        
    Pass null and use setDocumentForAnonymous() if a RenderText is created with the Document as renderer
    to keep them working. Text renderers should be factored similarly to the rest.

* rendering/RenderTextControl.cpp:
(WebCore::RenderTextControl::RenderTextControl):
* rendering/RenderTextControl.h:
* rendering/RenderTextControlMultiLine.cpp:
(WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
* rendering/RenderTextControlMultiLine.h:
(RenderTextControlMultiLine):
* rendering/RenderTextControlSingleLine.cpp:
(WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
* rendering/RenderTextControlSingleLine.h:
(RenderTextControlSingleLine):
(WebCore::RenderTextControlInnerBlock::RenderTextControlInnerBlock):
* rendering/RenderTextTrackCue.cpp:
(WebCore::RenderTextTrackCue::RenderTextTrackCue):
* rendering/RenderView.cpp:
(WebCore::RenderView::RenderView):
* rendering/RenderWidget.cpp:
(WebCore::RenderWidget::RenderWidget):
* rendering/RenderWidget.h:
* rendering/mathml/RenderMathMLBlock.cpp:
(WebCore::RenderMathMLBlock::RenderMathMLBlock):
(WebCore::RenderMathMLBlock::createAnonymousMathMLBlock):
* rendering/mathml/RenderMathMLBlock.h:
* rendering/mathml/RenderMathMLFenced.cpp:
(WebCore::RenderMathMLFenced::createMathMLOperator):
* rendering/mathml/RenderMathMLOperator.cpp:
(WebCore::RenderMathMLOperator::RenderMathMLOperator):
(WebCore::RenderMathMLOperator::updateFromElement):
(WebCore::RenderMathMLOperator::createGlyph):
* rendering/mathml/RenderMathMLOperator.h:
* rendering/mathml/RenderMathMLRow.cpp:
(WebCore::RenderMathMLRow::RenderMathMLRow):
(WebCore::RenderMathMLRow::createAnonymousWithParentRenderer):
* rendering/mathml/RenderMathMLRow.h:
* rendering/style/ContentData.cpp:
(WebCore::ImageContentData::createRenderer):
* rendering/svg/RenderSVGBlock.cpp:
(WebCore::RenderSVGBlock::RenderSVGBlock):
* rendering/svg/RenderSVGInline.cpp:
(WebCore::RenderSVGInline::RenderSVGInline):
* rendering/svg/RenderSVGInline.h:
* rendering/svg/RenderSVGTSpan.cpp:
(WebCore::RenderSVGTSpan::RenderSVGTSpan):
* rendering/svg/RenderSVGTSpan.h:
* rendering/svg/RenderSVGTextPath.cpp:
(WebCore::RenderSVGTextPath::RenderSVGTextPath):
* rendering/svg/RenderSVGTextPath.h:



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@140244 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 3c11c61..4d7c57e 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,242 @@
+2013-01-18  Antti Koivisto  <antti@apple.com>
+
+        Make renderer constructors take Element where possible
+        https://bugs.webkit.org/show_bug.cgi?id=107138
+
+        Reviewed by David Hyatt.
+        
+        Tighter typing prevents bugs and enables optimizations.
+
+        The patch changes how anonymous rendererer are constructed. Previously Document* as the node parameter
+        indicated that the renderer was anonymous. This forced the code to operate on ContainerNodes (Document
+        is not an Element). Now anonymous renderers are constructed by passing null and the document is set by
+        separate setDocumentForAnonymous() call. The patch uses RenderFoo::createAnonymous() pattern consistently.
+
+        Most constructors are switched to take Element. RenderBlock still takes ContainerNode due to a few subclasses
+        (RenderView and RenderFlowThread) that pass in a Document.
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::updateScrollCorner):
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::createAnonymous):
+        (WebCore::RenderBlock::createReplacementRunIn):
+        (WebCore::RenderBlock::updateFirstLetterStyle):
+        (WebCore::RenderBlock::createFirstLetterRenderer):
+        (WebCore::RenderBlock::createAnonymousWithParentRendererAndDisplay):
+        (WebCore::RenderBlock::createAnonymousColumnsWithParentRenderer):
+        (WebCore::RenderBlock::createAnonymousColumnSpanWithParentRenderer):
+        * rendering/RenderBlock.h:
+        * rendering/RenderDeprecatedFlexibleBox.cpp:
+        (WebCore::RenderDeprecatedFlexibleBox::RenderDeprecatedFlexibleBox):
+        (WebCore::RenderDeprecatedFlexibleBox::createAnonymous):
+        * rendering/RenderDeprecatedFlexibleBox.h:
+        (RenderDeprecatedFlexibleBox):
+        * rendering/RenderDetailsMarker.cpp:
+        (WebCore::RenderDetailsMarker::RenderDetailsMarker):
+        * rendering/RenderDetailsMarker.h:
+        (RenderDetailsMarker):
+        * rendering/RenderDialog.h:
+        (WebCore::RenderDialog::RenderDialog):
+        * rendering/RenderFieldset.cpp:
+        (WebCore::RenderFieldset::RenderFieldset):
+        * rendering/RenderFieldset.h:
+        * rendering/RenderFlexibleBox.cpp:
+        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
+        * rendering/RenderFlexibleBox.h:
+        (RenderFlexibleBox):
+        * rendering/RenderFlowThread.cpp:
+        (WebCore::RenderFlowThread::RenderFlowThread):
+        * rendering/RenderFlowThread.h:
+        * rendering/RenderFullScreen.cpp:
+        (RenderFullScreenPlaceholder::RenderFullScreenPlaceholder):
+        (RenderFullScreen::RenderFullScreen):
+        (RenderFullScreen::createAnonymous):
+        (RenderFullScreen::wrapRenderer):
+        * rendering/RenderFullScreen.h:
+        (RenderFullScreen):
+        * rendering/RenderGrid.cpp:
+        (WebCore::RenderGrid::RenderGrid):
+        * rendering/RenderGrid.h:
+        * rendering/RenderImage.cpp:
+        (WebCore::RenderImage::RenderImage):
+        (WebCore::RenderImage::createAnonymous):
+        * rendering/RenderImage.h:
+        * rendering/RenderInline.cpp:
+        (WebCore::RenderInline::RenderInline):
+        (WebCore::RenderInline::createAnonymous):
+        (WebCore::RenderInline::addChildIgnoringContinuation):
+        * rendering/RenderInline.h:
+        (RenderInline):
+        (WebCore::RenderInline::node):
+        
+            Add version with covariant Element return type.
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::updateScrollCornerStyle):
+        (WebCore::RenderLayer::updateResizerStyle):
+        (WebCore::RenderLayer::createReflection):
+        (WebCore::RenderListItem::RenderListItem):
+        (WebCore::RenderListItem::styleDidChange):
+        * rendering/RenderListItem.h:
+        * rendering/RenderListMarker.cpp:
+        (WebCore::RenderListMarker::RenderListMarker):
+        (WebCore::RenderListMarker::createAnonymous):
+        * rendering/RenderListMarker.h:
+        * rendering/RenderMediaControlElements.cpp:
+        (WebCore::RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer):
+        (WebCore::RenderMediaControlTimeDisplay::RenderMediaControlTimeDisplay):
+        (WebCore::RenderTextTrackContainerElement::RenderTextTrackContainerElement):
+        * rendering/RenderMediaControlElements.h:
+        (RenderMediaVolumeSliderContainer):
+        (RenderMediaControlTimeDisplay):
+        (RenderTextTrackContainerElement):
+        * rendering/RenderMultiColumnBlock.cpp:
+        (WebCore::RenderMultiColumnBlock::RenderMultiColumnBlock):
+        (WebCore::RenderMultiColumnBlock::ensureColumnSets):
+        * rendering/RenderMultiColumnBlock.h:
+        * rendering/RenderMultiColumnFlowThread.cpp:
+        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
+        * rendering/RenderMultiColumnFlowThread.h:
+        (RenderMultiColumnFlowThread):
+        * rendering/RenderMultiColumnSet.cpp:
+        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
+        (WebCore::RenderMultiColumnSet::createAnonymous):
+        * rendering/RenderMultiColumnSet.h:
+        (RenderMultiColumnSet):
+        * rendering/RenderNamedFlowThread.cpp:
+        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
+        * rendering/RenderNamedFlowThread.h:
+        (RenderNamedFlowThread):
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::RenderObject):
+        * rendering/RenderObject.h:
+        
+             Passed in null node indicates that the renderer is anonymous. Remove now unnecessary setIsAnonymous() function.
+
+        (WebCore::RenderObject::isAnonymous):
+        (WebCore::RenderObject::setDocumentForAnonymous):
+        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
+        * rendering/RenderRegion.cpp:
+        (WebCore::RenderRegion::RenderRegion):
+        * rendering/RenderRegion.h:
+        * rendering/RenderRegionSet.cpp:
+        (WebCore::RenderRegionSet::RenderRegionSet):
+        * rendering/RenderRegionSet.h:
+        * rendering/RenderReplaced.cpp:
+        (WebCore::RenderReplaced::RenderReplaced):
+        * rendering/RenderReplaced.h:
+        * rendering/RenderReplica.cpp:
+        (WebCore::RenderReplica::RenderReplica):
+        (WebCore::RenderReplica::createAnonymous):
+        * rendering/RenderReplica.h:
+        (RenderReplica):
+        * rendering/RenderRuby.cpp:
+        (WebCore::createAnonymousRubyInlineBlock):
+        (WebCore::RenderRubyAsInline::RenderRubyAsInline):
+        (WebCore::RenderRubyAsBlock::RenderRubyAsBlock):
+        * rendering/RenderRuby.h:
+        (RenderRubyAsInline):
+        (RenderRubyAsBlock):
+        * rendering/RenderRubyBase.cpp:
+        (WebCore::RenderRubyBase::RenderRubyBase):
+        (WebCore::RenderRubyBase::createAnonymous):
+        * rendering/RenderRubyBase.h:
+        (RenderRubyBase):
+        * rendering/RenderRubyRun.cpp:
+        (WebCore::RenderRubyRun::RenderRubyRun):
+        (WebCore::RenderRubyRun::createRubyBase):
+        (WebCore::RenderRubyRun::staticCreateRubyRun):
+        * rendering/RenderRubyRun.h:
+        * rendering/RenderRubyText.cpp:
+        (WebCore::RenderRubyText::RenderRubyText):
+        * rendering/RenderRubyText.h:
+        * rendering/RenderScrollbar.cpp:
+        (WebCore::RenderScrollbar::updateScrollbarPart):
+        * rendering/RenderScrollbarPart.cpp:
+        (WebCore::RenderScrollbarPart::RenderScrollbarPart):
+        (WebCore::RenderScrollbarPart::createAnonymous):
+        * rendering/RenderScrollbarPart.h:
+        (RenderScrollbarPart):
+        * rendering/RenderSearchField.cpp:
+        (WebCore::RenderSearchField::RenderSearchField):
+        * rendering/RenderSearchField.h:
+        (RenderSearchField):
+        * rendering/RenderTable.cpp:
+        (WebCore::RenderTable::RenderTable):
+        (WebCore::RenderTable::createAnonymousWithParentRenderer):
+        * rendering/RenderTable.h:
+        * rendering/RenderTableCaption.cpp:
+        (WebCore::RenderTableCaption::RenderTableCaption):
+        * rendering/RenderTableCaption.h:
+        * rendering/RenderTableCell.cpp:
+        (WebCore::RenderTableCell::RenderTableCell):
+        (WebCore::RenderTableCell::createAnonymousWithParentRenderer):
+        * rendering/RenderTableCell.h:
+        * rendering/RenderTableCol.cpp:
+        (WebCore::RenderTableCol::RenderTableCol):
+        * rendering/RenderTableCol.h:
+        * rendering/RenderTableRow.cpp:
+        (WebCore::RenderTableRow::RenderTableRow):
+        (WebCore::RenderTableRow::createAnonymousWithParentRenderer):
+        * rendering/RenderTableRow.h:
+        * rendering/RenderTableSection.cpp:
+        (WebCore::RenderTableSection::RenderTableSection):
+        (WebCore::RenderTableSection::createAnonymousWithParentRenderer):
+        * rendering/RenderTableSection.h:
+        * rendering/RenderText.cpp:
+        (WebCore::RenderText::RenderText):
+        
+            Pass null and use setDocumentForAnonymous() if a RenderText is created with the Document as renderer
+            to keep them working. Text renderers should be factored similarly to the rest.
+
+        * rendering/RenderTextControl.cpp:
+        (WebCore::RenderTextControl::RenderTextControl):
+        * rendering/RenderTextControl.h:
+        * rendering/RenderTextControlMultiLine.cpp:
+        (WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
+        * rendering/RenderTextControlMultiLine.h:
+        (RenderTextControlMultiLine):
+        * rendering/RenderTextControlSingleLine.cpp:
+        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
+        * rendering/RenderTextControlSingleLine.h:
+        (RenderTextControlSingleLine):
+        (WebCore::RenderTextControlInnerBlock::RenderTextControlInnerBlock):
+        * rendering/RenderTextTrackCue.cpp:
+        (WebCore::RenderTextTrackCue::RenderTextTrackCue):
+        * rendering/RenderView.cpp:
+        (WebCore::RenderView::RenderView):
+        * rendering/RenderWidget.cpp:
+        (WebCore::RenderWidget::RenderWidget):
+        * rendering/RenderWidget.h:
+        * rendering/mathml/RenderMathMLBlock.cpp:
+        (WebCore::RenderMathMLBlock::RenderMathMLBlock):
+        (WebCore::RenderMathMLBlock::createAnonymousMathMLBlock):
+        * rendering/mathml/RenderMathMLBlock.h:
+        * rendering/mathml/RenderMathMLFenced.cpp:
+        (WebCore::RenderMathMLFenced::createMathMLOperator):
+        * rendering/mathml/RenderMathMLOperator.cpp:
+        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
+        (WebCore::RenderMathMLOperator::updateFromElement):
+        (WebCore::RenderMathMLOperator::createGlyph):
+        * rendering/mathml/RenderMathMLOperator.h:
+        * rendering/mathml/RenderMathMLRow.cpp:
+        (WebCore::RenderMathMLRow::RenderMathMLRow):
+        (WebCore::RenderMathMLRow::createAnonymousWithParentRenderer):
+        * rendering/mathml/RenderMathMLRow.h:
+        * rendering/style/ContentData.cpp:
+        (WebCore::ImageContentData::createRenderer):
+        * rendering/svg/RenderSVGBlock.cpp:
+        (WebCore::RenderSVGBlock::RenderSVGBlock):
+        * rendering/svg/RenderSVGInline.cpp:
+        (WebCore::RenderSVGInline::RenderSVGInline):
+        * rendering/svg/RenderSVGInline.h:
+        * rendering/svg/RenderSVGTSpan.cpp:
+        (WebCore::RenderSVGTSpan::RenderSVGTSpan):
+        * rendering/svg/RenderSVGTSpan.h:
+        * rendering/svg/RenderSVGTextPath.cpp:
+        (WebCore::RenderSVGTextPath::RenderSVGTextPath):
+        * rendering/svg/RenderSVGTextPath.h:
+
 2013-01-19  Zan Dobersek  <zdobersek@igalia.com>
 
         Unreviewed GTK build fix.
diff --git a/Source/WebCore/page/FrameView.cpp b/Source/WebCore/page/FrameView.cpp
index 9669906..03b466a 100644
--- a/Source/WebCore/page/FrameView.cpp
+++ b/Source/WebCore/page/FrameView.cpp
@@ -3022,7 +3022,7 @@
 
     if (cornerStyle) {
         if (!m_scrollCorner)
-            m_scrollCorner = new (renderer->renderArena()) RenderScrollbarPart(renderer->document());
+            m_scrollCorner = RenderScrollbarPart::createAnonymous(renderer->document());
         m_scrollCorner->setStyle(cornerStyle.release());
         invalidateScrollCorner(cornerRect);
     } else if (m_scrollCorner) {
diff --git a/Source/WebCore/rendering/RenderBlock.cpp b/Source/WebCore/rendering/RenderBlock.cpp
index 968dfe6..ab3967c 100644
--- a/Source/WebCore/rendering/RenderBlock.cpp
+++ b/Source/WebCore/rendering/RenderBlock.cpp
@@ -238,6 +238,13 @@
         removeBlockFromDescendantAndContainerMaps(this, gPositionedDescendantsMap, gPositionedContainerMap);
 }
 
+RenderBlock* RenderBlock::createAnonymous(Document* document)
+{
+    RenderBlock* renderer = new (document->renderArena()) RenderBlock(0);
+    renderer->setDocumentForAnonymous(document);
+    return renderer;
+}
+
 void RenderBlock::willBeDestroyed()
 {
     // Mark as being destroyed to avoid trouble with merges in removeChild().
@@ -1847,7 +1854,7 @@
     if (!runIn->isRenderBlock())
         newRunIn = new (renderArena()) RenderBlock(runIn->node());
     else
-        newRunIn = new (renderArena()) RenderInline(runIn->node());
+        newRunIn = new (renderArena()) RenderInline(toElement(runIn->node()));
 
     runIn->node()->setRenderer(newRunIn);
     newRunIn->setStyle(runIn->style());
@@ -6432,9 +6439,9 @@
         // The first-letter renderer needs to be replaced. Create a new renderer of the right type.
         RenderObject* newFirstLetter;
         if (pseudoStyle->display() == INLINE)
-            newFirstLetter = new (renderArena()) RenderInline(document());
+            newFirstLetter = RenderInline::createAnonymous(document());
         else
-            newFirstLetter = new (renderArena()) RenderBlock(document());
+            newFirstLetter = RenderBlock::createAnonymous(document());
         newFirstLetter->setStyle(pseudoStyle);
 
         // Move the first letter into the new renderer.
@@ -6478,9 +6485,9 @@
     RenderStyle* pseudoStyle = styleForFirstLetter(firstLetterBlock, firstLetterContainer);
     RenderObject* firstLetter = 0;
     if (pseudoStyle->display() == INLINE)
-        firstLetter = new (renderArena()) RenderInline(document());
+        firstLetter = RenderInline::createAnonymous(document());
     else
-        firstLetter = new (renderArena()) RenderBlock(document());
+        firstLetter = RenderBlock::createAnonymous(document());
     firstLetter->setStyle(pseudoStyle);
     firstLetterContainer->addChild(firstLetter, currentChild);
 
@@ -7727,10 +7734,10 @@
     EDisplay newDisplay;
     RenderBlock* newBox = 0;
     if (display == BOX || display == INLINE_BOX) {
-        newBox = new (parent->renderArena()) RenderDeprecatedFlexibleBox(parent->document() /* anonymous box */);
+        newBox = RenderDeprecatedFlexibleBox::createAnonymous(parent->document());
         newDisplay = BOX;
     } else {
-        newBox = new (parent->renderArena()) RenderBlock(parent->document() /* anonymous box */);
+        newBox = RenderBlock::createAnonymous(parent->document());
         newDisplay = BLOCK;
     }
 
@@ -7744,7 +7751,7 @@
     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parent->style(), BLOCK);
     newStyle->inheritColumnPropertiesFrom(parent->style());
 
-    RenderBlock* newBox = new (parent->renderArena()) RenderBlock(parent->document() /* anonymous box */);
+    RenderBlock* newBox = RenderBlock::createAnonymous(parent->document());
     newBox->setStyle(newStyle.release());
     return newBox;
 }
@@ -7754,7 +7761,7 @@
     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parent->style(), BLOCK);
     newStyle->setColumnSpan(ColumnSpanAll);
 
-    RenderBlock* newBox = new (parent->renderArena()) RenderBlock(parent->document() /* anonymous box */);
+    RenderBlock* newBox = RenderBlock::createAnonymous(parent->document());
     newBox->setStyle(newStyle.release());
     return newBox;
 }
diff --git a/Source/WebCore/rendering/RenderBlock.h b/Source/WebCore/rendering/RenderBlock.h
index 00a4bcf..240e934 100644
--- a/Source/WebCore/rendering/RenderBlock.h
+++ b/Source/WebCore/rendering/RenderBlock.h
@@ -91,6 +91,8 @@
     RenderBlock(ContainerNode*);
     virtual ~RenderBlock();
 
+    static RenderBlock* createAnonymous(Document*);
+
     RenderObject* firstChild() const { ASSERT(children() == virtualChildren()); return children()->firstChild(); }
     RenderObject* lastChild() const { ASSERT(children() == virtualChildren()); return children()->lastChild(); }
 
diff --git a/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp b/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp
index 8f0eb54..ba7d3c8 100644
--- a/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp
+++ b/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp
@@ -119,8 +119,8 @@
     int m_ordinalIteration;
 };
 
-RenderDeprecatedFlexibleBox::RenderDeprecatedFlexibleBox(ContainerNode* node)
-    : RenderBlock(node)
+RenderDeprecatedFlexibleBox::RenderDeprecatedFlexibleBox(Element* element)
+    : RenderBlock(element)
 {
     setChildrenInline(false); // All of our children must be block-level
     m_stretchingChildren = false;
@@ -130,6 +130,13 @@
 {
 }
 
+RenderDeprecatedFlexibleBox* RenderDeprecatedFlexibleBox::createAnonymous(Document* document)
+{
+    RenderDeprecatedFlexibleBox* renderer = new (document->renderArena()) RenderDeprecatedFlexibleBox(0);
+    renderer->setDocumentForAnonymous(document);
+    return renderer;
+}
+
 static LayoutUnit marginWidthForChild(RenderBox* child)
 {
     // A margin basically has three types: fixed, percentage, and auto (variable).
diff --git a/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.h b/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.h
index 2ada059..e0d4ab3 100644
--- a/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.h
+++ b/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.h
@@ -31,9 +31,11 @@
 
 class RenderDeprecatedFlexibleBox : public RenderBlock {
 public:
-    RenderDeprecatedFlexibleBox(ContainerNode*);
+    RenderDeprecatedFlexibleBox(Element*);
     virtual ~RenderDeprecatedFlexibleBox();
 
+    static RenderDeprecatedFlexibleBox* createAnonymous(Document*);
+
     virtual const char* renderName() const;
 
     virtual void styleWillChange(StyleDifference, const RenderStyle* newStyle) OVERRIDE;
diff --git a/Source/WebCore/rendering/RenderDetailsMarker.cpp b/Source/WebCore/rendering/RenderDetailsMarker.cpp
index 5d110b4..bb1c799 100644
--- a/Source/WebCore/rendering/RenderDetailsMarker.cpp
+++ b/Source/WebCore/rendering/RenderDetailsMarker.cpp
@@ -31,8 +31,8 @@
 
 using namespace HTMLNames;
 
-RenderDetailsMarker::RenderDetailsMarker(ContainerNode* node)
-    : RenderBlock(node)
+RenderDetailsMarker::RenderDetailsMarker(Element* element)
+    : RenderBlock(element)
 {
 }
 
diff --git a/Source/WebCore/rendering/RenderDetailsMarker.h b/Source/WebCore/rendering/RenderDetailsMarker.h
index 7b44e00..b63b145 100644
--- a/Source/WebCore/rendering/RenderDetailsMarker.h
+++ b/Source/WebCore/rendering/RenderDetailsMarker.h
@@ -28,7 +28,7 @@
 
 class RenderDetailsMarker : public RenderBlock {
 public:
-    RenderDetailsMarker(ContainerNode*);
+    RenderDetailsMarker(Element*);
 
     enum Orientation { Up, Down, Left, Right };
 
diff --git a/Source/WebCore/rendering/RenderDialog.h b/Source/WebCore/rendering/RenderDialog.h
index 4f357f9..a672c06 100644
--- a/Source/WebCore/rendering/RenderDialog.h
+++ b/Source/WebCore/rendering/RenderDialog.h
@@ -36,8 +36,8 @@
 
 class RenderDialog : public RenderBlock {
 public:
-    explicit RenderDialog(ContainerNode* node)
-        : RenderBlock(node)
+    explicit RenderDialog(Element* element)
+        : RenderBlock(element)
     { }
 
     virtual ~RenderDialog() { }
diff --git a/Source/WebCore/rendering/RenderFieldset.cpp b/Source/WebCore/rendering/RenderFieldset.cpp
index bc4b227..5cda159 100644
--- a/Source/WebCore/rendering/RenderFieldset.cpp
+++ b/Source/WebCore/rendering/RenderFieldset.cpp
@@ -36,7 +36,7 @@
 
 using namespace HTMLNames;
 
-RenderFieldset::RenderFieldset(ContainerNode* element)
+RenderFieldset::RenderFieldset(Element* element)
     : RenderBlock(element)
 {
 }
diff --git a/Source/WebCore/rendering/RenderFieldset.h b/Source/WebCore/rendering/RenderFieldset.h
index ad1e3e1..d703f76 100644
--- a/Source/WebCore/rendering/RenderFieldset.h
+++ b/Source/WebCore/rendering/RenderFieldset.h
@@ -30,7 +30,7 @@
 
 class RenderFieldset : public RenderBlock {
 public:
-    explicit RenderFieldset(ContainerNode*);
+    explicit RenderFieldset(Element*);
 
     enum FindLegendOption { IgnoreFloatingOrOutOfFlow, IncludeFloatingOrOutOfFlow };
     RenderBox* findLegend(FindLegendOption = IgnoreFloatingOrOutOfFlow) const;
diff --git a/Source/WebCore/rendering/RenderFlexibleBox.cpp b/Source/WebCore/rendering/RenderFlexibleBox.cpp
index f188eb0..62b33e4 100644
--- a/Source/WebCore/rendering/RenderFlexibleBox.cpp
+++ b/Source/WebCore/rendering/RenderFlexibleBox.cpp
@@ -123,8 +123,8 @@
 };
 
 
-RenderFlexibleBox::RenderFlexibleBox(ContainerNode* node)
-    : RenderBlock(node)
+RenderFlexibleBox::RenderFlexibleBox(Element* element)
+    : RenderBlock(element)
     , m_orderIterator(this)
     , m_numberOfInFlowChildrenOnFirstLine(-1)
 {
diff --git a/Source/WebCore/rendering/RenderFlexibleBox.h b/Source/WebCore/rendering/RenderFlexibleBox.h
index 65b9e00..e390f77 100644
--- a/Source/WebCore/rendering/RenderFlexibleBox.h
+++ b/Source/WebCore/rendering/RenderFlexibleBox.h
@@ -37,7 +37,7 @@
 
 class RenderFlexibleBox : public RenderBlock {
 public:
-    RenderFlexibleBox(ContainerNode*);
+    RenderFlexibleBox(Element*);
     virtual ~RenderFlexibleBox();
 
     virtual const char* renderName() const OVERRIDE;
diff --git a/Source/WebCore/rendering/RenderFlowThread.cpp b/Source/WebCore/rendering/RenderFlowThread.cpp
index 6c573c2..ba93b1d 100644
--- a/Source/WebCore/rendering/RenderFlowThread.cpp
+++ b/Source/WebCore/rendering/RenderFlowThread.cpp
@@ -45,8 +45,10 @@
 
 namespace WebCore {
 
-RenderFlowThread::RenderFlowThread(ContainerNode* node)
-    : RenderBlock(node)
+// FIXME: RenderFlowThread should either be anonymous or be associated with some Element.
+// It should not be constructed as a renderer for the Document.
+RenderFlowThread::RenderFlowThread(Document* document)
+    : RenderBlock(document)
     , m_regionsInvalidated(false)
     , m_regionsHaveUniformLogicalWidth(true)
     , m_regionsHaveUniformLogicalHeight(true)
@@ -55,8 +57,7 @@
     , m_dispatchRegionLayoutUpdateEvent(false)
     , m_pageLogicalHeightChanged(false)
 {
-    ASSERT(node->document()->cssRegionsEnabled());
-    setIsAnonymous(false);
+    ASSERT(document->cssRegionsEnabled());
     setInRenderFlowThread();
 }
 
diff --git a/Source/WebCore/rendering/RenderFlowThread.h b/Source/WebCore/rendering/RenderFlowThread.h
index 0ae2da5..6ad0ea8 100644
--- a/Source/WebCore/rendering/RenderFlowThread.h
+++ b/Source/WebCore/rendering/RenderFlowThread.h
@@ -53,7 +53,7 @@
 
 class RenderFlowThread: public RenderBlock {
 public:
-    RenderFlowThread(ContainerNode*);
+    RenderFlowThread(Document*);
     virtual ~RenderFlowThread() { };
     
     virtual bool isRenderFlowThread() const { return true; }
diff --git a/Source/WebCore/rendering/RenderFullScreen.cpp b/Source/WebCore/rendering/RenderFullScreen.cpp
index 27be980..f13c302 100644
--- a/Source/WebCore/rendering/RenderFullScreen.cpp
+++ b/Source/WebCore/rendering/RenderFullScreen.cpp
@@ -39,9 +39,10 @@
 class RenderFullScreenPlaceholder : public RenderBlock {
 public:
     RenderFullScreenPlaceholder(RenderFullScreen* owner) 
-        : RenderBlock(owner->document())
+        : RenderBlock(0)
         , m_owner(owner) 
-    { 
+    {
+        setDocumentForAnonymous(owner->document());
     }
 private:
     virtual bool isRenderFullScreenPlaceholder() const { return true; }
@@ -55,13 +56,20 @@
     RenderBlock::willBeDestroyed();
 }
 
-RenderFullScreen::RenderFullScreen(Document* document)
-    : RenderDeprecatedFlexibleBox(document)
+RenderFullScreen::RenderFullScreen()
+    : RenderDeprecatedFlexibleBox(0)
     , m_placeholder(0)
-{ 
+{
     setReplaced(false); 
 }
 
+RenderFullScreen* RenderFullScreen::createAnonymous(Document* document)
+{
+    RenderFullScreen* renderer = new (document->renderArena()) RenderFullScreen();
+    renderer->setDocumentForAnonymous(document);
+    return renderer;
+}
+
 void RenderFullScreen::willBeDestroyed()
 {
     if (m_placeholder) {
@@ -107,7 +115,7 @@
 
 RenderObject* RenderFullScreen::wrapRenderer(RenderObject* object, RenderObject* parent, Document* document)
 {
-    RenderFullScreen* fullscreenRenderer = new (document->renderArena()) RenderFullScreen(document);
+    RenderFullScreen* fullscreenRenderer = RenderFullScreen::createAnonymous(document);
     fullscreenRenderer->setStyle(createFullScreenStyle());
     if (parent && !parent->isChildAllowed(fullscreenRenderer, fullscreenRenderer->style())) {
         fullscreenRenderer->destroy();
diff --git a/Source/WebCore/rendering/RenderFullScreen.h b/Source/WebCore/rendering/RenderFullScreen.h
index 9917aa9..5083fed 100644
--- a/Source/WebCore/rendering/RenderFullScreen.h
+++ b/Source/WebCore/rendering/RenderFullScreen.h
@@ -34,7 +34,8 @@
 
 class RenderFullScreen : public RenderDeprecatedFlexibleBox {
 public:
-    RenderFullScreen(Document*);
+    static RenderFullScreen* createAnonymous(Document*);
+
     virtual bool isRenderFullScreen() const { return true; }
     virtual const char* renderName() const { return "RenderFullScreen"; }
 
@@ -47,8 +48,9 @@
     void unwrapRenderer();
 
 private:
+    RenderFullScreen();
     virtual void willBeDestroyed();
-    
+
 protected:
     RenderBlock* m_placeholder;
 };
diff --git a/Source/WebCore/rendering/RenderGrid.cpp b/Source/WebCore/rendering/RenderGrid.cpp
index 8c201e0..18629b8 100644
--- a/Source/WebCore/rendering/RenderGrid.cpp
+++ b/Source/WebCore/rendering/RenderGrid.cpp
@@ -52,8 +52,8 @@
     LayoutUnit m_maxBreadth;
 };
 
-RenderGrid::RenderGrid(ContainerNode* node)
-    : RenderBlock(node)
+RenderGrid::RenderGrid(Element* element)
+    : RenderBlock(element)
 {
     // All of our children must be block level.
     setChildrenInline(false);
diff --git a/Source/WebCore/rendering/RenderGrid.h b/Source/WebCore/rendering/RenderGrid.h
index 7b82484..5f0753c 100644
--- a/Source/WebCore/rendering/RenderGrid.h
+++ b/Source/WebCore/rendering/RenderGrid.h
@@ -34,7 +34,7 @@
 
 class RenderGrid : public RenderBlock {
 public:
-    RenderGrid(ContainerNode*);
+    RenderGrid(Element*);
     virtual ~RenderGrid();
 
     virtual const char* renderName() const OVERRIDE;
diff --git a/Source/WebCore/rendering/RenderImage.cpp b/Source/WebCore/rendering/RenderImage.cpp
index 279a823..fd4c34f 100644
--- a/Source/WebCore/rendering/RenderImage.cpp
+++ b/Source/WebCore/rendering/RenderImage.cpp
@@ -52,8 +52,8 @@
 
 using namespace HTMLNames;
 
-RenderImage::RenderImage(ContainerNode* node)
-    : RenderReplaced(node, IntSize())
+RenderImage::RenderImage(Element* element)
+    : RenderReplaced(element, IntSize())
     , m_needsToSetSizeForAltText(false)
     , m_didIncrementVisuallyNonEmptyPixelCount(false)
     , m_isGeneratedContent(false)
@@ -61,6 +61,13 @@
     updateAltText();
 }
 
+RenderImage* RenderImage::createAnonymous(Document* document)
+{
+    RenderImage* image = new (document->renderArena()) RenderImage(0);
+    image->setDocumentForAnonymous(document);
+    return image;
+}
+
 RenderImage::~RenderImage()
 {
     ASSERT(m_imageResource);
diff --git a/Source/WebCore/rendering/RenderImage.h b/Source/WebCore/rendering/RenderImage.h
index 33ad9a1..3db7b92 100644
--- a/Source/WebCore/rendering/RenderImage.h
+++ b/Source/WebCore/rendering/RenderImage.h
@@ -35,9 +35,11 @@
 
 class RenderImage : public RenderReplaced {
 public:
-    RenderImage(ContainerNode*);
+    RenderImage(Element*);
     virtual ~RenderImage();
 
+    static RenderImage* createAnonymous(Document*);
+
     void setImageResource(PassOwnPtr<RenderImageResource>);
 
     RenderImageResource* imageResource() { return m_imageResource.get(); }
diff --git a/Source/WebCore/rendering/RenderInline.cpp b/Source/WebCore/rendering/RenderInline.cpp
index 1930556..b250f7d 100644
--- a/Source/WebCore/rendering/RenderInline.cpp
+++ b/Source/WebCore/rendering/RenderInline.cpp
@@ -49,13 +49,20 @@
 
 namespace WebCore {
 
-RenderInline::RenderInline(ContainerNode* node)
-    : RenderBoxModelObject(node)
+RenderInline::RenderInline(Element* element)
+    : RenderBoxModelObject(element)
     , m_alwaysCreateLineBoxes(false)
 {
     setChildrenInline(true);
 }
 
+RenderInline* RenderInline::createAnonymous(Document* document)
+{
+    RenderInline* renderer = new (document->renderArena()) RenderInline(0);
+    renderer->setDocumentForAnonymous(document);
+    return renderer;
+}
+
 void RenderInline::willBeDestroyed()
 {
 #if !ASSERT_DISABLED
@@ -310,7 +317,7 @@
         if (RenderObject* positionedAncestor = inFlowPositionedInlineAncestor(this))
             newStyle->setPosition(positionedAncestor->style()->position());
 
-        RenderBlock* newBox = new (renderArena()) RenderBlock(document() /* anonymous box */);
+        RenderBlock* newBox = RenderBlock::createAnonymous(document());
         newBox->setStyle(newStyle.release());
         RenderBoxModelObject* oldContinuation = continuation();
         setContinuation(newBox);
diff --git a/Source/WebCore/rendering/RenderInline.h b/Source/WebCore/rendering/RenderInline.h
index 17608aa..a01f5db 100644
--- a/Source/WebCore/rendering/RenderInline.h
+++ b/Source/WebCore/rendering/RenderInline.h
@@ -33,13 +33,17 @@
 
 class RenderInline : public RenderBoxModelObject {
 public:
-    explicit RenderInline(ContainerNode*);
+    explicit RenderInline(Element*);
+
+    static RenderInline* createAnonymous(Document*);
 
     RenderObject* firstChild() const { ASSERT(children() == virtualChildren()); return children()->firstChild(); }
     RenderObject* lastChild() const { ASSERT(children() == virtualChildren()); return children()->lastChild(); }
 
     virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0);
 
+    Element* node() const { return toElement(RenderBoxModelObject::node()); }
+
     virtual LayoutUnit marginLeft() const;
     virtual LayoutUnit marginRight() const;
     virtual LayoutUnit marginTop() const;
diff --git a/Source/WebCore/rendering/RenderLayer.cpp b/Source/WebCore/rendering/RenderLayer.cpp
index 7990e43..ea5d59f6 100644
--- a/Source/WebCore/rendering/RenderLayer.cpp
+++ b/Source/WebCore/rendering/RenderLayer.cpp
@@ -5571,7 +5571,7 @@
     RefPtr<RenderStyle> corner = renderer()->hasOverflowClip() ? actualRenderer->getUncachedPseudoStyle(SCROLLBAR_CORNER, actualRenderer->style()) : PassRefPtr<RenderStyle>(0);
     if (corner) {
         if (!m_scrollCorner) {
-            m_scrollCorner = new (renderer()->renderArena()) RenderScrollbarPart(renderer()->document());
+            m_scrollCorner = RenderScrollbarPart::createAnonymous(renderer()->document());
             m_scrollCorner->setParent(renderer());
         }
         m_scrollCorner->setStyle(corner.release());
@@ -5587,7 +5587,7 @@
     RefPtr<RenderStyle> resizer = renderer()->hasOverflowClip() ? actualRenderer->getUncachedPseudoStyle(RESIZER, actualRenderer->style()) : PassRefPtr<RenderStyle>(0);
     if (resizer) {
         if (!m_resizer) {
-            m_resizer = new (renderer()->renderArena()) RenderScrollbarPart(renderer()->document());
+            m_resizer = RenderScrollbarPart::createAnonymous(renderer()->document());
             m_resizer->setParent(renderer());
         }
         m_resizer->setStyle(resizer.release());
@@ -5605,7 +5605,7 @@
 void RenderLayer::createReflection()
 {
     ASSERT(!m_reflection);
-    m_reflection = new (renderer()->renderArena()) RenderReplica(renderer()->document());
+    m_reflection = RenderReplica::createAnonymous(renderer()->document());
     m_reflection->setParent(renderer()); // We create a 1-way connection.
 }
 
diff --git a/Source/WebCore/rendering/RenderListItem.cpp b/Source/WebCore/rendering/RenderListItem.cpp
index 91be834..bfc62b1 100644
--- a/Source/WebCore/rendering/RenderListItem.cpp
+++ b/Source/WebCore/rendering/RenderListItem.cpp
@@ -39,8 +39,8 @@
 
 using namespace HTMLNames;
 
-RenderListItem::RenderListItem(ContainerNode* node)
-    : RenderBlock(node)
+RenderListItem::RenderListItem(Element* element)
+    : RenderBlock(element)
     , m_marker(0)
     , m_hasExplicitValue(false)
     , m_isValueUpToDate(false)
@@ -60,7 +60,7 @@
         // up (e.g., in some deeply nested line box). See CSS3 spec.
         newStyle->inheritFrom(style()); 
         if (!m_marker)
-            m_marker = new (renderArena()) RenderListMarker(this);
+            m_marker = RenderListMarker::createAnonymous(this);
         m_marker->setStyle(newStyle.release());
     } else if (m_marker) {
         m_marker->destroy();
diff --git a/Source/WebCore/rendering/RenderListItem.h b/Source/WebCore/rendering/RenderListItem.h
index a15549e..b8a8c31 100644
--- a/Source/WebCore/rendering/RenderListItem.h
+++ b/Source/WebCore/rendering/RenderListItem.h
@@ -31,7 +31,7 @@
 
 class RenderListItem : public RenderBlock {
 public:
-    explicit RenderListItem(ContainerNode*);
+    explicit RenderListItem(Element*);
 
     int value() const { if (!m_isValueUpToDate) updateValueNow(); return m_value; }
     void updateValue();
diff --git a/Source/WebCore/rendering/RenderListMarker.cpp b/Source/WebCore/rendering/RenderListMarker.cpp
index 2cd882b..9cc6822 100644
--- a/Source/WebCore/rendering/RenderListMarker.cpp
+++ b/Source/WebCore/rendering/RenderListMarker.cpp
@@ -1055,7 +1055,7 @@
 }
 
 RenderListMarker::RenderListMarker(RenderListItem* item)
-    : RenderBox(item->document())
+    : RenderBox(0)
     , m_listItem(item)
 {
     // init RenderObject attributes
@@ -1069,6 +1069,14 @@
         m_image->removeClient(this);
 }
 
+RenderListMarker* RenderListMarker::createAnonymous(RenderListItem* item)
+{
+    Document* document = item->document();
+    RenderListMarker* renderer = new (document->renderArena()) RenderListMarker(item);
+    renderer->setDocumentForAnonymous(document);
+    return renderer;
+}
+
 void RenderListMarker::styleWillChange(StyleDifference diff, const RenderStyle* newStyle)
 {
     if (style() && (newStyle->listStylePosition() != style()->listStylePosition() || newStyle->listStyleType() != style()->listStyleType()))
diff --git a/Source/WebCore/rendering/RenderListMarker.h b/Source/WebCore/rendering/RenderListMarker.h
index fde2807..f13b21e 100644
--- a/Source/WebCore/rendering/RenderListMarker.h
+++ b/Source/WebCore/rendering/RenderListMarker.h
@@ -35,7 +35,8 @@
 // The RenderListMarker always has to be a child of a RenderListItem.
 class RenderListMarker : public RenderBox {
 public:
-    RenderListMarker(RenderListItem*);
+    static RenderListMarker* createAnonymous(RenderListItem*);
+
     virtual ~RenderListMarker();
 
     const String& text() const { return m_text; }
@@ -48,6 +49,8 @@
     void updateMarginsAndContent();
 
 private:
+    RenderListMarker(RenderListItem*);
+
     virtual const char* renderName() const { return "RenderListMarker"; }
     virtual void computePreferredLogicalWidths() OVERRIDE;
 
diff --git a/Source/WebCore/rendering/RenderMediaControlElements.cpp b/Source/WebCore/rendering/RenderMediaControlElements.cpp
index b9d7535..64c4224 100644
--- a/Source/WebCore/rendering/RenderMediaControlElements.cpp
+++ b/Source/WebCore/rendering/RenderMediaControlElements.cpp
@@ -35,8 +35,8 @@
 
 namespace WebCore {
 
-RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer(ContainerNode* node)
-    : RenderBlock(node)
+RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer(Element* element)
+    : RenderBlock(element)
 {
 }
 
@@ -59,8 +59,8 @@
 
 // ----------------------------
 
-RenderMediaControlTimeDisplay::RenderMediaControlTimeDisplay(ContainerNode* node)
-    : RenderDeprecatedFlexibleBox(node)
+RenderMediaControlTimeDisplay::RenderMediaControlTimeDisplay(Element* element)
+    : RenderDeprecatedFlexibleBox(element)
 {
 }
 
@@ -83,8 +83,8 @@
 
 #if ENABLE(VIDEO_TRACK)
 
-RenderTextTrackContainerElement::RenderTextTrackContainerElement(ContainerNode* node)
-    : RenderBlock(node)
+RenderTextTrackContainerElement::RenderTextTrackContainerElement(Element* element)
+    : RenderBlock(element)
 {
 }
 
diff --git a/Source/WebCore/rendering/RenderMediaControlElements.h b/Source/WebCore/rendering/RenderMediaControlElements.h
index 2dc20b3..1cb70b2 100644
--- a/Source/WebCore/rendering/RenderMediaControlElements.h
+++ b/Source/WebCore/rendering/RenderMediaControlElements.h
@@ -38,7 +38,7 @@
 
 class RenderMediaVolumeSliderContainer : public RenderBlock {
 public:
-    RenderMediaVolumeSliderContainer(ContainerNode*);
+    RenderMediaVolumeSliderContainer(Element*);
 
 private:
     virtual void layout();
@@ -48,7 +48,7 @@
 
 class RenderMediaControlTimeDisplay : public RenderDeprecatedFlexibleBox {
 public:
-    RenderMediaControlTimeDisplay(ContainerNode*);
+    RenderMediaControlTimeDisplay(Element*);
 
 private:
     virtual void layout();
@@ -60,7 +60,7 @@
 
 class RenderTextTrackContainerElement : public RenderBlock {
 public:
-    RenderTextTrackContainerElement(ContainerNode*);
+    RenderTextTrackContainerElement(Element*);
 
 private:
     virtual void layout();
diff --git a/Source/WebCore/rendering/RenderMultiColumnBlock.cpp b/Source/WebCore/rendering/RenderMultiColumnBlock.cpp
index d31a6d1..8198383 100644
--- a/Source/WebCore/rendering/RenderMultiColumnBlock.cpp
+++ b/Source/WebCore/rendering/RenderMultiColumnBlock.cpp
@@ -33,8 +33,8 @@
 
 namespace WebCore {
 
-RenderMultiColumnBlock::RenderMultiColumnBlock(ContainerNode* node)
-    : RenderBlock(node)
+RenderMultiColumnBlock::RenderMultiColumnBlock(Element* element)
+    : RenderBlock(element)
     , m_flowThread(0)
     , m_columnCount(1)
     , m_columnWidth(0)
@@ -144,7 +144,7 @@
 
     RenderMultiColumnSet* columnSet = firstChild()->isRenderMultiColumnSet() ? toRenderMultiColumnSet(firstChild()) : 0;
     if (!columnSet) {
-        columnSet = new (renderArena()) RenderMultiColumnSet(document(), flowThread());
+        columnSet = RenderMultiColumnSet::createAnonymous(flowThread());
         columnSet->setStyle(RenderStyle::createAnonymousStyleWithDisplay(style(), BLOCK));
         RenderBlock::addChild(columnSet, firstChild());
     }
diff --git a/Source/WebCore/rendering/RenderMultiColumnBlock.h b/Source/WebCore/rendering/RenderMultiColumnBlock.h
index 9753cf0..d8283fd 100644
--- a/Source/WebCore/rendering/RenderMultiColumnBlock.h
+++ b/Source/WebCore/rendering/RenderMultiColumnBlock.h
@@ -35,8 +35,8 @@
 
 class RenderMultiColumnBlock : public RenderBlock {
 public:
-    RenderMultiColumnBlock(ContainerNode*);
-    
+    RenderMultiColumnBlock(Element*);
+
     LayoutUnit columnHeight() const { return m_columnHeight; }
     void setColumnHeight(LayoutUnit columnHeight) { m_columnHeight = columnHeight; }
 
diff --git a/Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp b/Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp
index 339daf0..158619b 100644
--- a/Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp
+++ b/Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp
@@ -28,8 +28,8 @@
 
 namespace WebCore {
 
-RenderMultiColumnFlowThread::RenderMultiColumnFlowThread(ContainerNode* node)
-    : RenderFlowThread(node)
+RenderMultiColumnFlowThread::RenderMultiColumnFlowThread(Document* document)
+    : RenderFlowThread(document)
 {
 }
 
diff --git a/Source/WebCore/rendering/RenderMultiColumnFlowThread.h b/Source/WebCore/rendering/RenderMultiColumnFlowThread.h
index 54af7a2..d9c30c7 100644
--- a/Source/WebCore/rendering/RenderMultiColumnFlowThread.h
+++ b/Source/WebCore/rendering/RenderMultiColumnFlowThread.h
@@ -33,7 +33,7 @@
 
 class RenderMultiColumnFlowThread : public RenderFlowThread {
 public:
-    RenderMultiColumnFlowThread(ContainerNode*);
+    RenderMultiColumnFlowThread(Document*);
     ~RenderMultiColumnFlowThread();
 
 private:
diff --git a/Source/WebCore/rendering/RenderMultiColumnSet.cpp b/Source/WebCore/rendering/RenderMultiColumnSet.cpp
index 90b3b9d..1d905c4 100644
--- a/Source/WebCore/rendering/RenderMultiColumnSet.cpp
+++ b/Source/WebCore/rendering/RenderMultiColumnSet.cpp
@@ -36,8 +36,8 @@
 
 namespace WebCore {
 
-RenderMultiColumnSet::RenderMultiColumnSet(ContainerNode* node, RenderFlowThread* flowThread)
-    : RenderRegionSet(node, flowThread)
+RenderMultiColumnSet::RenderMultiColumnSet(RenderFlowThread* flowThread)
+    : RenderRegionSet(0, flowThread)
     , m_computedColumnCount(1)
     , m_computedColumnWidth(0)
     , m_computedColumnHeight(0)
@@ -49,6 +49,14 @@
 {
 }
 
+RenderMultiColumnSet* RenderMultiColumnSet::createAnonymous(RenderFlowThread* flowThread)
+{
+    Document* document = flowThread->document();
+    RenderMultiColumnSet* renderer = new (document->renderArena()) RenderMultiColumnSet(flowThread);
+    renderer->setDocumentForAnonymous(document);
+    return renderer;
+}
+
 LayoutUnit RenderMultiColumnSet::pageLogicalTopForOffset(LayoutUnit offset) const
 {
     LayoutUnit portionLogicalTop = (isHorizontalWritingMode() ? flowThreadPortionRect().y() : flowThreadPortionRect().x());
diff --git a/Source/WebCore/rendering/RenderMultiColumnSet.h b/Source/WebCore/rendering/RenderMultiColumnSet.h
index 0d5c431..bf75015 100644
--- a/Source/WebCore/rendering/RenderMultiColumnSet.h
+++ b/Source/WebCore/rendering/RenderMultiColumnSet.h
@@ -43,8 +43,8 @@
 // come before and after the span.
 class RenderMultiColumnSet : public RenderRegionSet {
 public:
-    RenderMultiColumnSet(ContainerNode*, RenderFlowThread*);
-    
+    static RenderMultiColumnSet* createAnonymous(RenderFlowThread*);
+
     virtual bool isRenderMultiColumnSet() const OVERRIDE { return true; }
 
     unsigned computedColumnCount() const { return m_computedColumnCount; }
@@ -88,6 +88,8 @@
     void setRequiresBalancing(bool balancing) { m_requiresBalancing = balancing; }
 
 private:
+    RenderMultiColumnSet(RenderFlowThread*);
+
     virtual void updateLogicalWidth() OVERRIDE;
     virtual void updateLogicalHeight() OVERRIDE;
     virtual void computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop, LogicalExtentComputedValues&) const OVERRIDE;
diff --git a/Source/WebCore/rendering/RenderNamedFlowThread.cpp b/Source/WebCore/rendering/RenderNamedFlowThread.cpp
index c933ca6..1e4c4f0 100644
--- a/Source/WebCore/rendering/RenderNamedFlowThread.cpp
+++ b/Source/WebCore/rendering/RenderNamedFlowThread.cpp
@@ -40,8 +40,8 @@
 
 namespace WebCore {
 
-RenderNamedFlowThread::RenderNamedFlowThread(ContainerNode* node, PassRefPtr<WebKitNamedFlow> namedFlow)
-    : RenderFlowThread(node)
+RenderNamedFlowThread::RenderNamedFlowThread(Document* document, PassRefPtr<WebKitNamedFlow> namedFlow)
+    : RenderFlowThread(document)
     , m_namedFlow(namedFlow)
     , m_regionLayoutUpdateEventTimer(this, &RenderNamedFlowThread::regionLayoutUpdateEventTimerFired)
 {
diff --git a/Source/WebCore/rendering/RenderNamedFlowThread.h b/Source/WebCore/rendering/RenderNamedFlowThread.h
index 1b401f6..7b3dcc2 100644
--- a/Source/WebCore/rendering/RenderNamedFlowThread.h
+++ b/Source/WebCore/rendering/RenderNamedFlowThread.h
@@ -45,7 +45,7 @@
 
 class RenderNamedFlowThread : public RenderFlowThread {
 public:
-    RenderNamedFlowThread(ContainerNode*, PassRefPtr<WebKitNamedFlow>);
+    RenderNamedFlowThread(Document*, PassRefPtr<WebKitNamedFlow>);
     virtual ~RenderNamedFlowThread();
 
     const AtomicString& flowThreadName() const;
diff --git a/Source/WebCore/rendering/RenderObject.cpp b/Source/WebCore/rendering/RenderObject.cpp
index a48af21..bed44e6 100644
--- a/Source/WebCore/rendering/RenderObject.cpp
+++ b/Source/WebCore/rendering/RenderObject.cpp
@@ -232,7 +232,6 @@
 #ifndef NDEBUG
     renderObjectCounter.increment();
 #endif
-    ASSERT(node);
 }
 
 RenderObject::~RenderObject()
diff --git a/Source/WebCore/rendering/RenderObject.h b/Source/WebCore/rendering/RenderObject.h
index 3bf1721..69d6043 100644
--- a/Source/WebCore/rendering/RenderObject.h
+++ b/Source/WebCore/rendering/RenderObject.h
@@ -498,7 +498,6 @@
 #endif
 
     bool isAnonymous() const { return m_bitfields.isAnonymous(); }
-    void setIsAnonymous(bool b) { m_bitfields.setIsAnonymous(b); }
     bool isAnonymousBlock() const
     {
         // This function is kept in sync with anonymous block creation conditions in
@@ -992,6 +991,8 @@
     virtual void insertedIntoTree();
     virtual void willBeRemovedFromTree();
 
+    void setDocumentForAnonymous(Document* document) { ASSERT(isAnonymous()); m_node = document; }
+
 private:
     void removeFromRenderFlowThread();
     void removeFromRenderFlowThreadRecursive(RenderFlowThread*);
@@ -1044,7 +1045,7 @@
             , m_preferredLogicalWidthsDirty(false)
             , m_floating(false)
             , m_paintBackground(false)
-            , m_isAnonymous(node == node->document())
+            , m_isAnonymous(!node)
             , m_isText(false)
             , m_isBox(false)
             , m_isInline(true)
diff --git a/Source/WebCore/rendering/RenderRegion.cpp b/Source/WebCore/rendering/RenderRegion.cpp
index b07040b..40a7378 100644
--- a/Source/WebCore/rendering/RenderRegion.cpp
+++ b/Source/WebCore/rendering/RenderRegion.cpp
@@ -43,8 +43,8 @@
 
 namespace WebCore {
 
-RenderRegion::RenderRegion(ContainerNode* node, RenderFlowThread* flowThread)
-    : RenderReplaced(node, IntSize())
+RenderRegion::RenderRegion(Element* element, RenderFlowThread* flowThread)
+    : RenderReplaced(element, IntSize())
     , m_flowThread(flowThread)
     , m_parentNamedFlowThread(0)
     , m_isValid(false)
diff --git a/Source/WebCore/rendering/RenderRegion.h b/Source/WebCore/rendering/RenderRegion.h
index af86be5..a1fe87c 100644
--- a/Source/WebCore/rendering/RenderRegion.h
+++ b/Source/WebCore/rendering/RenderRegion.h
@@ -42,7 +42,7 @@
 
 class RenderRegion : public RenderReplaced {
 public:
-    explicit RenderRegion(ContainerNode*, RenderFlowThread*);
+    explicit RenderRegion(Element*, RenderFlowThread*);
 
     virtual bool isRenderRegion() const { return true; }
 
diff --git a/Source/WebCore/rendering/RenderRegionSet.cpp b/Source/WebCore/rendering/RenderRegionSet.cpp
index 575bd45..e205bcb 100644
--- a/Source/WebCore/rendering/RenderRegionSet.cpp
+++ b/Source/WebCore/rendering/RenderRegionSet.cpp
@@ -30,8 +30,8 @@
 
 namespace WebCore {
 
-RenderRegionSet::RenderRegionSet(ContainerNode* node, RenderFlowThread* flowThread)
-    : RenderRegion(node, flowThread)
+RenderRegionSet::RenderRegionSet(Element* element, RenderFlowThread* flowThread)
+    : RenderRegion(element, flowThread)
 {
 }
 
diff --git a/Source/WebCore/rendering/RenderRegionSet.h b/Source/WebCore/rendering/RenderRegionSet.h
index 93c57e3..a70cc4c 100644
--- a/Source/WebCore/rendering/RenderRegionSet.h
+++ b/Source/WebCore/rendering/RenderRegionSet.h
@@ -47,7 +47,7 @@
 
 class RenderRegionSet : public RenderRegion {
 public:
-    RenderRegionSet(ContainerNode*, RenderFlowThread*);
+    RenderRegionSet(Element*, RenderFlowThread*);
     
 private:
     virtual void installFlowThread() OVERRIDE;
diff --git a/Source/WebCore/rendering/RenderReplaced.cpp b/Source/WebCore/rendering/RenderReplaced.cpp
index af39b84..1386e00 100644
--- a/Source/WebCore/rendering/RenderReplaced.cpp
+++ b/Source/WebCore/rendering/RenderReplaced.cpp
@@ -42,15 +42,15 @@
 const int cDefaultWidth = 300;
 const int cDefaultHeight = 150;
 
-RenderReplaced::RenderReplaced(ContainerNode* node)
-    : RenderBox(node)
+RenderReplaced::RenderReplaced(Element* element)
+    : RenderBox(element)
     , m_intrinsicSize(cDefaultWidth, cDefaultHeight)
 {
     setReplaced(true);
 }
 
-RenderReplaced::RenderReplaced(ContainerNode* node, const LayoutSize& intrinsicSize)
-    : RenderBox(node)
+RenderReplaced::RenderReplaced(Element* element, const LayoutSize& intrinsicSize)
+    : RenderBox(element)
     , m_intrinsicSize(intrinsicSize)
 {
     setReplaced(true);
diff --git a/Source/WebCore/rendering/RenderReplaced.h b/Source/WebCore/rendering/RenderReplaced.h
index 1e9d7e2..e14d65d 100644
--- a/Source/WebCore/rendering/RenderReplaced.h
+++ b/Source/WebCore/rendering/RenderReplaced.h
@@ -28,8 +28,8 @@
 
 class RenderReplaced : public RenderBox {
 public:
-    RenderReplaced(ContainerNode*);
-    RenderReplaced(ContainerNode*, const LayoutSize& intrinsicSize);
+    RenderReplaced(Element*);
+    RenderReplaced(Element*, const LayoutSize& intrinsicSize);
     virtual ~RenderReplaced();
 
     virtual LayoutUnit computeReplacedLogicalWidth(ShouldComputePreferred  = ComputeActual) const OVERRIDE;
diff --git a/Source/WebCore/rendering/RenderReplica.cpp b/Source/WebCore/rendering/RenderReplica.cpp
index b8a4f30..c311d77 100644
--- a/Source/WebCore/rendering/RenderReplica.cpp
+++ b/Source/WebCore/rendering/RenderReplica.cpp
@@ -33,8 +33,8 @@
 
 namespace WebCore {
 
-RenderReplica::RenderReplica(ContainerNode* node)
-    : RenderBox(node)
+RenderReplica::RenderReplica()
+    : RenderBox(0)
 {
     // This is a hack. Replicas are synthetic, and don't pick up the attributes of the
     // renderers being replicated, so they always report that they are inline, non-replaced.
@@ -43,6 +43,13 @@
     setReplaced(true);
 }
 
+RenderReplica* RenderReplica::createAnonymous(Document* document)
+{
+    RenderReplica* renderer = new (document->renderArena()) RenderReplica();
+    renderer->setDocumentForAnonymous(document);
+    return renderer;
+}
+
 RenderReplica::~RenderReplica()
 {
 }
diff --git a/Source/WebCore/rendering/RenderReplica.h b/Source/WebCore/rendering/RenderReplica.h
index cc0e82d..4665e13 100644
--- a/Source/WebCore/rendering/RenderReplica.h
+++ b/Source/WebCore/rendering/RenderReplica.h
@@ -35,7 +35,8 @@
 
 class RenderReplica : public RenderBox {
 public:
-    RenderReplica(ContainerNode*);
+    static RenderReplica* createAnonymous(Document*);
+
     virtual ~RenderReplica();
 
     virtual const char* renderName() const { return "RenderReplica"; }
@@ -47,6 +48,8 @@
     virtual void paint(PaintInfo&, const LayoutPoint&);
 
 private:
+    RenderReplica();
+
     virtual bool isReplica() const { return true; }
     virtual void computePreferredLogicalWidths();
 
diff --git a/Source/WebCore/rendering/RenderRuby.cpp b/Source/WebCore/rendering/RenderRuby.cpp
index 8a50c19..14af255 100644
--- a/Source/WebCore/rendering/RenderRuby.cpp
+++ b/Source/WebCore/rendering/RenderRuby.cpp
@@ -86,7 +86,7 @@
 static RenderBlock* createAnonymousRubyInlineBlock(RenderObject* ruby)
 {
     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(ruby->style(), INLINE_BLOCK);
-    RenderBlock* newBlock = new (ruby->renderArena()) RenderBlock(ruby->document() /* anonymous box */);
+    RenderBlock* newBlock = RenderBlock::createAnonymous(ruby->document());
     newBlock->setStyle(newStyle.release());
     return newBlock;
 }
@@ -109,8 +109,8 @@
 
 //=== ruby as inline object ===
 
-RenderRubyAsInline::RenderRubyAsInline(ContainerNode* node)
-    : RenderInline(node)
+RenderRubyAsInline::RenderRubyAsInline(Element* element)
+    : RenderInline(element)
 {
 }
 
@@ -213,11 +213,10 @@
     run->removeChild(child);
 }
 
-
 //=== ruby as block object ===
 
-RenderRubyAsBlock::RenderRubyAsBlock(ContainerNode* node)
-    : RenderBlock(node)
+RenderRubyAsBlock::RenderRubyAsBlock(Element* element)
+    : RenderBlock(element)
 {
 }
 
diff --git a/Source/WebCore/rendering/RenderRuby.h b/Source/WebCore/rendering/RenderRuby.h
index eb7e1c0..2494639 100644
--- a/Source/WebCore/rendering/RenderRuby.h
+++ b/Source/WebCore/rendering/RenderRuby.h
@@ -53,7 +53,7 @@
 // <ruby> when used as 'display:inline'
 class RenderRubyAsInline : public RenderInline {
 public:
-    RenderRubyAsInline(ContainerNode*);
+    RenderRubyAsInline(Element*);
     virtual ~RenderRubyAsInline();
 
     virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0);
@@ -72,7 +72,7 @@
 // <ruby> when used as 'display:block' or 'display:inline-block'
 class RenderRubyAsBlock : public RenderBlock {
 public:
-    RenderRubyAsBlock(ContainerNode*);
+    RenderRubyAsBlock(Element*);
     virtual ~RenderRubyAsBlock();
 
     virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0);
diff --git a/Source/WebCore/rendering/RenderRubyBase.cpp b/Source/WebCore/rendering/RenderRubyBase.cpp
index 3498f72..adc2f0d 100644
--- a/Source/WebCore/rendering/RenderRubyBase.cpp
+++ b/Source/WebCore/rendering/RenderRubyBase.cpp
@@ -38,8 +38,8 @@
 
 namespace WebCore {
 
-RenderRubyBase::RenderRubyBase(ContainerNode* node)
-    : RenderBlock(node)
+RenderRubyBase::RenderRubyBase()
+    : RenderBlock(0)
 {
     setInline(false);
 }
@@ -48,6 +48,13 @@
 {
 }
 
+RenderRubyBase* RenderRubyBase::createAnonymous(Document* document)
+{
+    RenderRubyBase* renderer = new (document->renderArena()) RenderRubyBase();
+    renderer->setDocumentForAnonymous(document);
+    return renderer;
+}
+
 bool RenderRubyBase::isChildAllowed(RenderObject* child, RenderStyle*) const
 {
     return child->isInline();
diff --git a/Source/WebCore/rendering/RenderRubyBase.h b/Source/WebCore/rendering/RenderRubyBase.h
index ddfe4ee..3888606 100644
--- a/Source/WebCore/rendering/RenderRubyBase.h
+++ b/Source/WebCore/rendering/RenderRubyBase.h
@@ -39,8 +39,9 @@
 
 class RenderRubyBase : public RenderBlock {
 public:
-    RenderRubyBase(ContainerNode*);
     virtual ~RenderRubyBase();
+    
+    static RenderRubyBase* createAnonymous(Document*);
 
     virtual const char* renderName() const { return "RenderRubyBase (anonymous)"; }
 
@@ -49,6 +50,8 @@
     virtual bool isChildAllowed(RenderObject*, RenderStyle*) const;
 
 private:
+    RenderRubyBase();
+
     virtual ETextAlign textAlignmentForLine(bool endsWithSoftBreak) const;
     virtual void adjustInlineDirectionLineBounds(int expansionOpportunityCount, float& logicalLeft, float& logicalWidth) const;
 
diff --git a/Source/WebCore/rendering/RenderRubyRun.cpp b/Source/WebCore/rendering/RenderRubyRun.cpp
index 4731618..c3d2665 100644
--- a/Source/WebCore/rendering/RenderRubyRun.cpp
+++ b/Source/WebCore/rendering/RenderRubyRun.cpp
@@ -42,8 +42,8 @@
 
 namespace WebCore {
 
-RenderRubyRun::RenderRubyRun(ContainerNode* node)
-    : RenderBlock(node)
+RenderRubyRun::RenderRubyRun()
+    : RenderBlock(0)
 {
     setReplaced(true);
     setInline(true);
@@ -199,17 +199,18 @@
 
 RenderRubyBase* RenderRubyRun::createRubyBase() const
 {
-    RenderRubyBase* rb = new (renderArena()) RenderRubyBase(document() /* anonymous */);
+    RenderRubyBase* renderer = RenderRubyBase::createAnonymous(document());
     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(style(), BLOCK);
     newStyle->setTextAlign(CENTER); // FIXME: use WEBKIT_CENTER?
-    rb->setStyle(newStyle.release());
-    return rb;
+    renderer->setStyle(newStyle.release());
+    return renderer;
 }
 
 RenderRubyRun* RenderRubyRun::staticCreateRubyRun(const RenderObject* parentRuby)
 {
     ASSERT(parentRuby && parentRuby->isRuby());
-    RenderRubyRun* rr = new (parentRuby->renderArena()) RenderRubyRun(parentRuby->document() /* anonymous */);
+    RenderRubyRun* rr = new (parentRuby->renderArena()) RenderRubyRun();
+    rr->setDocumentForAnonymous(parentRuby->document());
     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parentRuby->style(), INLINE_BLOCK);
     rr->setStyle(newStyle.release());
     return rr;
diff --git a/Source/WebCore/rendering/RenderRubyRun.h b/Source/WebCore/rendering/RenderRubyRun.h
index 33fb0d7..c7b7533 100644
--- a/Source/WebCore/rendering/RenderRubyRun.h
+++ b/Source/WebCore/rendering/RenderRubyRun.h
@@ -43,7 +43,6 @@
 
 class RenderRubyRun : public RenderBlock {
 public:
-    RenderRubyRun(ContainerNode*);
     virtual ~RenderRubyRun();
 
     bool hasRubyText() const;
@@ -71,6 +70,8 @@
     RenderRubyBase* createRubyBase() const;
 
 private:
+    RenderRubyRun();
+
     virtual bool isRubyRun() const { return true; }
     virtual const char* renderName() const { return "RenderRubyRun (anonymous)"; }
     virtual bool createsAnonymousWrapper() const { return true; }
diff --git a/Source/WebCore/rendering/RenderRubyText.cpp b/Source/WebCore/rendering/RenderRubyText.cpp
index f4122d2..497c8b7 100644
--- a/Source/WebCore/rendering/RenderRubyText.cpp
+++ b/Source/WebCore/rendering/RenderRubyText.cpp
@@ -37,8 +37,8 @@
 
 namespace WebCore {
 
-RenderRubyText::RenderRubyText(ContainerNode* node)
-    : RenderBlock(node)
+RenderRubyText::RenderRubyText(Element* element)
+    : RenderBlock(element)
 {
 }
 
diff --git a/Source/WebCore/rendering/RenderRubyText.h b/Source/WebCore/rendering/RenderRubyText.h
index c37e2e8..0b0bae5 100644
--- a/Source/WebCore/rendering/RenderRubyText.h
+++ b/Source/WebCore/rendering/RenderRubyText.h
@@ -37,7 +37,7 @@
 
 class RenderRubyText : public RenderBlock {
 public:
-    RenderRubyText(ContainerNode*);
+    RenderRubyText(Element*);
     virtual ~RenderRubyText();
 
     virtual const char* renderName() const { return "RenderRubyText"; }
diff --git a/Source/WebCore/rendering/RenderScrollbar.cpp b/Source/WebCore/rendering/RenderScrollbar.cpp
index 216c5f8..e6aa7d7 100644
--- a/Source/WebCore/rendering/RenderScrollbar.cpp
+++ b/Source/WebCore/rendering/RenderScrollbar.cpp
@@ -270,7 +270,7 @@
     
     RenderScrollbarPart* partRenderer = m_parts.get(partType);
     if (!partRenderer && needRenderer) {
-        partRenderer = new (owningRenderer()->renderArena()) RenderScrollbarPart(owningRenderer()->document(), this, partType);
+        partRenderer = RenderScrollbarPart::createAnonymous(owningRenderer()->document(), this, partType);
         m_parts.set(partType, partRenderer);
     } else if (partRenderer && !needRenderer) {
         m_parts.remove(partType);
diff --git a/Source/WebCore/rendering/RenderScrollbarPart.cpp b/Source/WebCore/rendering/RenderScrollbarPart.cpp
index cffba07..e17b853 100644
--- a/Source/WebCore/rendering/RenderScrollbarPart.cpp
+++ b/Source/WebCore/rendering/RenderScrollbarPart.cpp
@@ -35,8 +35,8 @@
 
 namespace WebCore {
 
-RenderScrollbarPart::RenderScrollbarPart(ContainerNode* node, RenderScrollbar* scrollbar, ScrollbarPart part)
-    : RenderBlock(node)
+RenderScrollbarPart::RenderScrollbarPart(RenderScrollbar* scrollbar, ScrollbarPart part)
+    : RenderBlock(0)
     , m_scrollbar(scrollbar)
     , m_part(part)
 {
@@ -46,6 +46,13 @@
 {
 }
 
+RenderScrollbarPart* RenderScrollbarPart::createAnonymous(Document* document, RenderScrollbar* scrollbar, ScrollbarPart part)
+{
+    RenderScrollbarPart* renderer = new (document->renderArena()) RenderScrollbarPart(scrollbar, part);
+    renderer->setDocumentForAnonymous(document);
+    return renderer;
+}
+
 void RenderScrollbarPart::layout()
 {
     StackStats::LayoutCheckPoint layoutCheckPoint;
diff --git a/Source/WebCore/rendering/RenderScrollbarPart.h b/Source/WebCore/rendering/RenderScrollbarPart.h
index a2f96b0..1cff118 100644
--- a/Source/WebCore/rendering/RenderScrollbarPart.h
+++ b/Source/WebCore/rendering/RenderScrollbarPart.h
@@ -35,7 +35,8 @@
 
 class RenderScrollbarPart : public RenderBlock {
 public:
-    RenderScrollbarPart(ContainerNode*, RenderScrollbar* = 0, ScrollbarPart = NoPart);
+    static RenderScrollbarPart* createAnonymous(Document*, RenderScrollbar* = 0, ScrollbarPart = NoPart);
+    
     virtual ~RenderScrollbarPart();
 
     virtual const char* renderName() const { return "RenderScrollbarPart"; }
@@ -61,6 +62,8 @@
     virtual void imageChanged(WrappedImagePtr, const IntRect* = 0);
 
 private:
+    RenderScrollbarPart(RenderScrollbar*, ScrollbarPart);
+
     virtual void computePreferredLogicalWidths();
 
     void layoutHorizontalPart();
diff --git a/Source/WebCore/rendering/RenderSearchField.cpp b/Source/WebCore/rendering/RenderSearchField.cpp
index 7a60bc5..7aab2d0 100644
--- a/Source/WebCore/rendering/RenderSearchField.cpp
+++ b/Source/WebCore/rendering/RenderSearchField.cpp
@@ -53,14 +53,14 @@
 
 // ----------------------------
 
-RenderSearchField::RenderSearchField(ContainerNode* node)
-    : RenderTextControlSingleLine(node)
+RenderSearchField::RenderSearchField(Element* element)
+    : RenderTextControlSingleLine(element)
     , m_searchPopupIsVisible(false)
     , m_searchPopup(0)
 {
-    ASSERT(node->isHTMLElement());
-    ASSERT(node->toInputElement());
-    ASSERT(node->toInputElement()->isSearchField());
+    ASSERT(element->isHTMLElement());
+    ASSERT(element->toInputElement());
+    ASSERT(element->toInputElement()->isSearchField());
 }
 
 RenderSearchField::~RenderSearchField()
diff --git a/Source/WebCore/rendering/RenderSearchField.h b/Source/WebCore/rendering/RenderSearchField.h
index 36d49cf..0da9c32 100644
--- a/Source/WebCore/rendering/RenderSearchField.h
+++ b/Source/WebCore/rendering/RenderSearchField.h
@@ -33,7 +33,7 @@
 
 class RenderSearchField : public RenderTextControlSingleLine, private PopupMenuClient {
 public:
-    RenderSearchField(ContainerNode*);
+    RenderSearchField(Element*);
     virtual ~RenderSearchField();
 
     void updateCancelButtonVisibility() const;
diff --git a/Source/WebCore/rendering/RenderTable.cpp b/Source/WebCore/rendering/RenderTable.cpp
index e447a1a..bae6c25 100644
--- a/Source/WebCore/rendering/RenderTable.cpp
+++ b/Source/WebCore/rendering/RenderTable.cpp
@@ -49,8 +49,8 @@
 
 using namespace HTMLNames;
 
-RenderTable::RenderTable(ContainerNode* node)
-    : RenderBlock(node)
+RenderTable::RenderTable(Element* element)
+    : RenderBlock(element)
     , m_head(0)
     , m_foot(0)
     , m_firstBody(0)
@@ -1362,7 +1362,8 @@
 RenderTable* RenderTable::createAnonymousWithParentRenderer(const RenderObject* parent)
 {
     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parent->style(), TABLE);
-    RenderTable* newTable = new (parent->renderArena()) RenderTable(parent->document() /* is anonymous */);
+    RenderTable* newTable = new (parent->renderArena()) RenderTable(0);
+    newTable->setDocumentForAnonymous(parent->document());
     newTable->setStyle(newStyle.release());
     return newTable;
 }
diff --git a/Source/WebCore/rendering/RenderTable.h b/Source/WebCore/rendering/RenderTable.h
index 7eed2b8..706e13a 100644
--- a/Source/WebCore/rendering/RenderTable.h
+++ b/Source/WebCore/rendering/RenderTable.h
@@ -42,7 +42,7 @@
 
 class RenderTable : public RenderBlock {
 public:
-    explicit RenderTable(ContainerNode*);
+    explicit RenderTable(Element*);
     virtual ~RenderTable();
 
     // Per CSS 3 writing-mode: "The first and second values of the 'border-spacing' property represent spacing between columns
diff --git a/Source/WebCore/rendering/RenderTableCaption.cpp b/Source/WebCore/rendering/RenderTableCaption.cpp
index ec2d5d9..76486f9 100644
--- a/Source/WebCore/rendering/RenderTableCaption.cpp
+++ b/Source/WebCore/rendering/RenderTableCaption.cpp
@@ -24,8 +24,8 @@
 
 namespace WebCore {
 
-RenderTableCaption::RenderTableCaption(ContainerNode* node)
-    : RenderBlock(node)
+RenderTableCaption::RenderTableCaption(Element* element)
+    : RenderBlock(element)
 {
 }
 
diff --git a/Source/WebCore/rendering/RenderTableCaption.h b/Source/WebCore/rendering/RenderTableCaption.h
index 9172bf4..700610e 100644
--- a/Source/WebCore/rendering/RenderTableCaption.h
+++ b/Source/WebCore/rendering/RenderTableCaption.h
@@ -28,7 +28,7 @@
 
 class RenderTableCaption : public RenderBlock {
 public:
-    explicit RenderTableCaption(ContainerNode*);
+    explicit RenderTableCaption(Element*);
     virtual ~RenderTableCaption();
     virtual LayoutUnit containingBlockLogicalWidthForContent() const OVERRIDE;
     
diff --git a/Source/WebCore/rendering/RenderTableCell.cpp b/Source/WebCore/rendering/RenderTableCell.cpp
index f2a1235..5b29610 100644
--- a/Source/WebCore/rendering/RenderTableCell.cpp
+++ b/Source/WebCore/rendering/RenderTableCell.cpp
@@ -55,8 +55,8 @@
 COMPILE_ASSERT(sizeof(RenderTableCell) == sizeof(SameSizeAsRenderTableCell), RenderTableCell_should_stay_small);
 COMPILE_ASSERT(sizeof(CollapsedBorderValue) == 8, CollapsedBorderValue_should_stay_small);
 
-RenderTableCell::RenderTableCell(ContainerNode* node)
-    : RenderBlock(node)
+RenderTableCell::RenderTableCell(Element* element)
+    : RenderBlock(element)
     , m_column(unsetColumnIndex)
     , m_cellWidthChanged(false)
     , m_intrinsicPaddingBefore(0)
@@ -1246,10 +1246,17 @@
         setIntrinsicPaddingAfter(intrinsicPaddingAfter() - scrollbarHeight);
 }
 
+RenderTableCell* RenderTableCell::createAnonymous(Document* document)
+{
+    RenderTableCell* renderer = new (document->renderArena()) RenderTableCell(0);
+    renderer->setDocumentForAnonymous(document);
+    return renderer;
+}
+
 RenderTableCell* RenderTableCell::createAnonymousWithParentRenderer(const RenderObject* parent)
 {
+    RenderTableCell* newCell = RenderTableCell::createAnonymous(parent->document());
     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parent->style(), TABLE_CELL);
-    RenderTableCell* newCell = new (parent->renderArena()) RenderTableCell(parent->document() /* is anonymous */);
     newCell->setStyle(newStyle.release());
     return newCell;
 }
diff --git a/Source/WebCore/rendering/RenderTableCell.h b/Source/WebCore/rendering/RenderTableCell.h
index 07fa0d5..24fdc2c 100644
--- a/Source/WebCore/rendering/RenderTableCell.h
+++ b/Source/WebCore/rendering/RenderTableCell.h
@@ -37,7 +37,7 @@
 
 class RenderTableCell : public RenderBlock {
 public:
-    explicit RenderTableCell(ContainerNode*);
+    explicit RenderTableCell(Element*);
     
     unsigned colSpan() const
     {
@@ -150,6 +150,7 @@
     bool cellWidthChanged() const { return m_cellWidthChanged; }
     void setCellWidthChanged(bool b = true) { m_cellWidthChanged = b; }
 
+    static RenderTableCell* createAnonymous(Document*);
     static RenderTableCell* createAnonymousWithParentRenderer(const RenderObject*);
     virtual RenderBox* createAnonymousBoxWithSameTypeAs(const RenderObject* parent) const OVERRIDE
     {
diff --git a/Source/WebCore/rendering/RenderTableCol.cpp b/Source/WebCore/rendering/RenderTableCol.cpp
index a829341..3eed9c2 100644
--- a/Source/WebCore/rendering/RenderTableCol.cpp
+++ b/Source/WebCore/rendering/RenderTableCol.cpp
@@ -37,8 +37,8 @@
 
 using namespace HTMLNames;
 
-RenderTableCol::RenderTableCol(ContainerNode* node)
-    : RenderBox(node)
+RenderTableCol::RenderTableCol(Element* element)
+    : RenderBox(element)
     , m_span(1)
 {
     // init RenderObject attributes
diff --git a/Source/WebCore/rendering/RenderTableCol.h b/Source/WebCore/rendering/RenderTableCol.h
index 395cbb7..ada5db6 100644
--- a/Source/WebCore/rendering/RenderTableCol.h
+++ b/Source/WebCore/rendering/RenderTableCol.h
@@ -35,7 +35,7 @@
 
 class RenderTableCol : public RenderBox {
 public:
-    explicit RenderTableCol(ContainerNode*);
+    explicit RenderTableCol(Element*);
 
     RenderObject* firstChild() const { ASSERT(children() == virtualChildren()); return children()->firstChild(); }
     RenderObject* lastChild() const { ASSERT(children() == virtualChildren()); return children()->lastChild(); }
diff --git a/Source/WebCore/rendering/RenderTableRow.cpp b/Source/WebCore/rendering/RenderTableRow.cpp
index 308cc0a..3b14010f 100644
--- a/Source/WebCore/rendering/RenderTableRow.cpp
+++ b/Source/WebCore/rendering/RenderTableRow.cpp
@@ -39,8 +39,8 @@
 
 using namespace HTMLNames;
 
-RenderTableRow::RenderTableRow(ContainerNode* node)
-    : RenderBox(node)
+RenderTableRow::RenderTableRow(Element* element)
+    : RenderBox(element)
     , m_rowIndex(unsetRowIndex)
 {
     // init RenderObject attributes
@@ -246,10 +246,17 @@
     repaint();
 }
 
+RenderTableRow* RenderTableRow::createAnonymous(Document* document)
+{
+    RenderTableRow* renderer = new (document->renderArena()) RenderTableRow(0);
+    renderer->setDocumentForAnonymous(document);
+    return renderer;
+}
+
 RenderTableRow* RenderTableRow::createAnonymousWithParentRenderer(const RenderObject* parent)
 {
+    RenderTableRow* newRow = RenderTableRow::createAnonymous(parent->document());
     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parent->style(), TABLE_ROW);
-    RenderTableRow* newRow = new (parent->renderArena()) RenderTableRow(parent->document() /* is anonymous */);
     newRow->setStyle(newStyle.release());
     return newRow;
 }
diff --git a/Source/WebCore/rendering/RenderTableRow.h b/Source/WebCore/rendering/RenderTableRow.h
index 3c160cd..9b260b8 100644
--- a/Source/WebCore/rendering/RenderTableRow.h
+++ b/Source/WebCore/rendering/RenderTableRow.h
@@ -34,7 +34,7 @@
 
 class RenderTableRow : public RenderBox {
 public:
-    explicit RenderTableRow(ContainerNode*);
+    explicit RenderTableRow(Element*);
 
     RenderObject* firstChild() const { ASSERT(children() == virtualChildren()); return children()->firstChild(); }
     RenderObject* lastChild() const { ASSERT(children() == virtualChildren()); return children()->lastChild(); }
@@ -47,6 +47,7 @@
 
     void paintOutlineForRowIfNeeded(PaintInfo&, const LayoutPoint&);
 
+    static RenderTableRow* createAnonymous(Document*);
     static RenderTableRow* createAnonymousWithParentRenderer(const RenderObject*);
     virtual RenderBox* createAnonymousBoxWithSameTypeAs(const RenderObject* parent) const OVERRIDE
     {
diff --git a/Source/WebCore/rendering/RenderTableSection.cpp b/Source/WebCore/rendering/RenderTableSection.cpp
index f34c70d..39a2f32 100644
--- a/Source/WebCore/rendering/RenderTableSection.cpp
+++ b/Source/WebCore/rendering/RenderTableSection.cpp
@@ -89,8 +89,8 @@
 }
 
 
-RenderTableSection::RenderTableSection(ContainerNode* node)
-    : RenderBox(node)
+RenderTableSection::RenderTableSection(Element* element)
+    : RenderBox(element)
     , m_cCol(0)
     , m_cRow(0)
     , m_outerBorderStart(0)
@@ -1415,7 +1415,8 @@
 RenderTableSection* RenderTableSection::createAnonymousWithParentRenderer(const RenderObject* parent)
 {
     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parent->style(), TABLE_ROW_GROUP);
-    RenderTableSection* newSection = new (parent->renderArena()) RenderTableSection(parent->document() /* is anonymous */);
+    RenderTableSection* newSection = new (parent->renderArena()) RenderTableSection(0);
+    newSection->setDocumentForAnonymous(parent->document());
     newSection->setStyle(newStyle.release());
     return newSection;
 }
diff --git a/Source/WebCore/rendering/RenderTableSection.h b/Source/WebCore/rendering/RenderTableSection.h
index e777e41..d5e9f45 100644
--- a/Source/WebCore/rendering/RenderTableSection.h
+++ b/Source/WebCore/rendering/RenderTableSection.h
@@ -62,7 +62,7 @@
 
 class RenderTableSection : public RenderBox {
 public:
-    RenderTableSection(ContainerNode*);
+    RenderTableSection(Element*);
     virtual ~RenderTableSection();
 
     RenderObject* firstChild() const { ASSERT(children() == virtualChildren()); return children()->firstChild(); }
diff --git a/Source/WebCore/rendering/RenderText.cpp b/Source/WebCore/rendering/RenderText.cpp
index 848649b..a9011d0 100644
--- a/Source/WebCore/rendering/RenderText.cpp
+++ b/Source/WebCore/rendering/RenderText.cpp
@@ -136,21 +136,25 @@
 }
 
 RenderText::RenderText(Node* node, PassRefPtr<StringImpl> str)
-     : RenderObject(node)
-     , m_hasTab(false)
-     , m_linesDirty(false)
-     , m_containsReversedText(false)
-     , m_knownToHaveNoOverflowAndNoFallbackFonts(false)
-     , m_needsTranscoding(false)
-     , m_minWidth(-1)
-     , m_maxWidth(-1)
-     , m_beginMinWidth(0)
-     , m_endMinWidth(0)
-     , m_text(str)
-     , m_firstTextBox(0)
-     , m_lastTextBox(0)
+    : RenderObject(!node || node->isDocumentNode() ? 0 : node)
+    , m_hasTab(false)
+    , m_linesDirty(false)
+    , m_containsReversedText(false)
+    , m_knownToHaveNoOverflowAndNoFallbackFonts(false)
+    , m_needsTranscoding(false)
+    , m_minWidth(-1)
+    , m_maxWidth(-1)
+    , m_beginMinWidth(0)
+    , m_endMinWidth(0)
+    , m_text(str)
+    , m_firstTextBox(0)
+    , m_lastTextBox(0)
 {
     ASSERT(m_text);
+    // FIXME: Some clients of RenderText (and subclasses) pass Document as node to create anonymous renderer.
+    // They should be switched to passing null and using setDocumentForAnonymous.
+    if (node && node->isDocumentNode())
+        setDocumentForAnonymous(static_cast<Document*>(node));
 
     m_is8Bit = m_text.is8Bit();
     if (is8Bit())
diff --git a/Source/WebCore/rendering/RenderTextControl.cpp b/Source/WebCore/rendering/RenderTextControl.cpp
index e649d15..f93addb 100644
--- a/Source/WebCore/rendering/RenderTextControl.cpp
+++ b/Source/WebCore/rendering/RenderTextControl.cpp
@@ -36,10 +36,10 @@
 
 namespace WebCore {
 
-RenderTextControl::RenderTextControl(ContainerNode* node)
-    : RenderBlock(node)
+RenderTextControl::RenderTextControl(Element* element)
+    : RenderBlock(element)
 {
-    ASSERT(isHTMLTextFormControlElement(node));
+    ASSERT(isHTMLTextFormControlElement(element));
 }
 
 RenderTextControl::~RenderTextControl()
diff --git a/Source/WebCore/rendering/RenderTextControl.h b/Source/WebCore/rendering/RenderTextControl.h
index b716bd3..9707bb7 100644
--- a/Source/WebCore/rendering/RenderTextControl.h
+++ b/Source/WebCore/rendering/RenderTextControl.h
@@ -38,7 +38,7 @@
     VisiblePosition visiblePositionForIndex(int index) const;
 
 protected:
-    RenderTextControl(ContainerNode*);
+    RenderTextControl(Element*);
 
     // This convenience function should not be made public because innerTextElement may outlive the render tree.
     HTMLElement* innerTextElement() const;
diff --git a/Source/WebCore/rendering/RenderTextControlMultiLine.cpp b/Source/WebCore/rendering/RenderTextControlMultiLine.cpp
index 4682cc9..4a3af61 100644
--- a/Source/WebCore/rendering/RenderTextControlMultiLine.cpp
+++ b/Source/WebCore/rendering/RenderTextControlMultiLine.cpp
@@ -32,8 +32,8 @@
 
 namespace WebCore {
 
-RenderTextControlMultiLine::RenderTextControlMultiLine(ContainerNode* node)
-    : RenderTextControl(node)
+RenderTextControlMultiLine::RenderTextControlMultiLine(Element* element)
+    : RenderTextControl(element)
 {
 }
 
diff --git a/Source/WebCore/rendering/RenderTextControlMultiLine.h b/Source/WebCore/rendering/RenderTextControlMultiLine.h
index f5b1bbb..1f90172 100644
--- a/Source/WebCore/rendering/RenderTextControlMultiLine.h
+++ b/Source/WebCore/rendering/RenderTextControlMultiLine.h
@@ -28,7 +28,7 @@
 
 class RenderTextControlMultiLine : public RenderTextControl {
 public:
-    RenderTextControlMultiLine(ContainerNode*);
+    RenderTextControlMultiLine(Element*);
     virtual ~RenderTextControlMultiLine();
 
 private:
diff --git a/Source/WebCore/rendering/RenderTextControlSingleLine.cpp b/Source/WebCore/rendering/RenderTextControlSingleLine.cpp
index f142727..1206f1d 100644
--- a/Source/WebCore/rendering/RenderTextControlSingleLine.cpp
+++ b/Source/WebCore/rendering/RenderTextControlSingleLine.cpp
@@ -49,13 +49,13 @@
 
 using namespace HTMLNames;
 
-RenderTextControlSingleLine::RenderTextControlSingleLine(ContainerNode* node)
-    : RenderTextControl(node)
+RenderTextControlSingleLine::RenderTextControlSingleLine(Element* element)
+    : RenderTextControl(element)
     , m_shouldDrawCapsLockIndicator(false)
     , m_desiredInnerTextHeight(-1)
 {
-    ASSERT(node->isHTMLElement());
-    ASSERT(node->toInputElement());
+    ASSERT(element->isHTMLElement());
+    ASSERT(element->toInputElement());
 }
 
 RenderTextControlSingleLine::~RenderTextControlSingleLine()
diff --git a/Source/WebCore/rendering/RenderTextControlSingleLine.h b/Source/WebCore/rendering/RenderTextControlSingleLine.h
index f7461cb..f4721c8 100644
--- a/Source/WebCore/rendering/RenderTextControlSingleLine.h
+++ b/Source/WebCore/rendering/RenderTextControlSingleLine.h
@@ -32,7 +32,7 @@
 
 class RenderTextControlSingleLine : public RenderTextControl {
 public:
-    RenderTextControlSingleLine(ContainerNode*);
+    RenderTextControlSingleLine(Element*);
     virtual ~RenderTextControlSingleLine();
     // FIXME: Move create*Style() to their classes.
     virtual PassRefPtr<RenderStyle> createInnerTextStyle(const RenderStyle* startStyle) const;
@@ -110,7 +110,7 @@
 
 class RenderTextControlInnerBlock : public RenderBlock {
 public:
-    RenderTextControlInnerBlock(ContainerNode* node) : RenderBlock(node) { }
+    RenderTextControlInnerBlock(Element* element) : RenderBlock(element) { }
 
 private:
     virtual bool hasLineIfEmpty() const { return true; }
diff --git a/Source/WebCore/rendering/RenderTextTrackCue.cpp b/Source/WebCore/rendering/RenderTextTrackCue.cpp
index 51613e0..0033e1b 100644
--- a/Source/WebCore/rendering/RenderTextTrackCue.cpp
+++ b/Source/WebCore/rendering/RenderTextTrackCue.cpp
@@ -33,9 +33,9 @@
 
 namespace WebCore {
 
-RenderTextTrackCue::RenderTextTrackCue(TextTrackCueBox* node)
-    : RenderBlock(node)
-    , m_cue(node->getCue())
+RenderTextTrackCue::RenderTextTrackCue(TextTrackCueBox* element)
+    : RenderBlock(element)
+    , m_cue(element->getCue())
 {
 }
 
diff --git a/Source/WebCore/rendering/RenderView.cpp b/Source/WebCore/rendering/RenderView.cpp
index 17f4f1a..ac70a07 100644
--- a/Source/WebCore/rendering/RenderView.cpp
+++ b/Source/WebCore/rendering/RenderView.cpp
@@ -69,10 +69,6 @@
     , m_renderCounterCount(0)
     , m_layoutPhase(RenderViewNormalLayout)
 {
-    // Clear our anonymous bit, set because RenderObject assumes
-    // any renderer with document as the node is anonymous.
-    setIsAnonymous(false);
-
     // init RenderObject attributes
     setInline(false);
     
diff --git a/Source/WebCore/rendering/RenderWidget.cpp b/Source/WebCore/rendering/RenderWidget.cpp
index 2079e2d..77fa5f5 100644
--- a/Source/WebCore/rendering/RenderWidget.cpp
+++ b/Source/WebCore/rendering/RenderWidget.cpp
@@ -85,10 +85,10 @@
     WidgetHierarchyUpdatesSuspensionScope::scheduleWidgetToMove(child, parent);
 }
 
-RenderWidget::RenderWidget(ContainerNode* node)
-    : RenderReplaced(node)
+RenderWidget::RenderWidget(Element* element)
+    : RenderReplaced(element)
     , m_widget(0)
-    , m_frameView(node->document()->view())
+    , m_frameView(element->document()->view())
     // Reference counting is used to prevent the widget from being
     // destroyed while inside the Widget code, which might not be
     // able to handle that.
diff --git a/Source/WebCore/rendering/RenderWidget.h b/Source/WebCore/rendering/RenderWidget.h
index d0e10af..2dd61a1 100644
--- a/Source/WebCore/rendering/RenderWidget.h
+++ b/Source/WebCore/rendering/RenderWidget.h
@@ -73,7 +73,7 @@
     void deref(RenderArena*);
 
 protected:
-    RenderWidget(ContainerNode*);
+    RenderWidget(Element*);
 
     FrameView* frameView() const { return m_frameView; }
 
diff --git a/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp b/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp
index 2b18edc..2d5b1ccb 100644
--- a/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp
+++ b/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp
@@ -42,7 +42,7 @@
     
 using namespace MathMLNames;
     
-RenderMathMLBlock::RenderMathMLBlock(ContainerNode* container)
+RenderMathMLBlock::RenderMathMLBlock(Element* container)
     : RenderFlexibleBox(container)
     , m_ignoreInAccessibilityTree(false)
     , m_preferredLogicalHeight(preferredLogicalHeightUnset)
@@ -64,7 +64,8 @@
 RenderMathMLBlock* RenderMathMLBlock::createAnonymousMathMLBlock(EDisplay display)
 {
     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(style(), display);
-    RenderMathMLBlock* newBlock = new (renderArena()) RenderMathMLBlock(document() /* is anonymous */);
+    RenderMathMLBlock* newBlock = new (renderArena()) RenderMathMLBlock(0);
+    newBlock->setDocumentForAnonymous(document());
     newBlock->setStyle(newStyle.release());
     return newBlock;
 }
diff --git a/Source/WebCore/rendering/mathml/RenderMathMLBlock.h b/Source/WebCore/rendering/mathml/RenderMathMLBlock.h
index d7e1675..e2d8da4 100644
--- a/Source/WebCore/rendering/mathml/RenderMathMLBlock.h
+++ b/Source/WebCore/rendering/mathml/RenderMathMLBlock.h
@@ -41,7 +41,8 @@
 
 class RenderMathMLBlock : public RenderFlexibleBox {
 public:
-    RenderMathMLBlock(ContainerNode*);
+    RenderMathMLBlock(Element* container);
+
     virtual bool isChildAllowed(RenderObject*, RenderStyle*) const;
     
     virtual bool isRenderMathMLBlock() const { return true; }
diff --git a/Source/WebCore/rendering/mathml/RenderMathMLFenced.cpp b/Source/WebCore/rendering/mathml/RenderMathMLFenced.cpp
index 96f6cba..9640ad5 100644
--- a/Source/WebCore/rendering/mathml/RenderMathMLFenced.cpp
+++ b/Source/WebCore/rendering/mathml/RenderMathMLFenced.cpp
@@ -89,7 +89,7 @@
     newStyle->setMarginEnd(Length((operatorType == RenderMathMLOperator::Fence ? gFenceMarginEms : gSeparatorMarginEndEms) * style()->fontSize(), Fixed));
     if (operatorType == RenderMathMLOperator::Fence)
         newStyle->setMarginStart(Length(gFenceMarginEms * style()->fontSize(), Fixed));
-    RenderMathMLOperator* newOperator = new (renderArena()) RenderMathMLOperator(node() /* "almost anonymous" */, uChar);
+    RenderMathMLOperator* newOperator = new (renderArena()) RenderMathMLOperator(toElement(node()), uChar);
     newOperator->setOperatorType(operatorType);
     newOperator->setStyle(newStyle.release());
     return newOperator;
diff --git a/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp b/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp
index 0bebb4e..bab3a48 100644
--- a/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp
+++ b/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp
@@ -47,8 +47,8 @@
 {
 }
 
-RenderMathMLOperator::RenderMathMLOperator(ContainerNode* node, UChar operatorChar)
-    : RenderMathMLBlock(node)
+RenderMathMLOperator::RenderMathMLOperator(Element* element, UChar operatorChar)
+    : RenderMathMLBlock(element)
     , m_stretchHeight(0)
     , m_operator(convertHyphenMinusToMinusSign(operatorChar))
     , m_operatorType(Default)
@@ -146,7 +146,7 @@
     bool stretchDisabled = false;
     
     // We may need the element later if we can't stretch.
-    if (node()->nodeType() == Node::ELEMENT_NODE) {
+    if (node()->isElementNode()) {
         if (Element* mo = static_cast<Element*>(node())) {
             AtomicString stretchyAttr = mo->getAttribute(MathMLNames::stretchyAttr);
             stretchDisabled = equalIgnoringCase(stretchyAttr, "false");
@@ -202,7 +202,7 @@
     // Either stretch is disabled or we don't have a stretchable character over the minimum height
     if (stretchDisabled || !shouldStack) {
         m_isStacked = false;
-        RenderBlock* container = new (renderArena()) RenderMathMLBlock(node());
+        RenderBlock* container = new (renderArena()) RenderMathMLBlock(toElement(node()));
         // This container doesn't offer any useful information to accessibility.
         toRenderMathMLBlock(container)->setIgnoreInAccessibilityTree(true);
         
@@ -227,7 +227,7 @@
         RenderText* text = 0;
         if (m_operator) 
             text = new (renderArena()) RenderText(node(), StringImpl::create(&m_operator, 1));
-        else if (node()->nodeType() == Node::ELEMENT_NODE)
+        else if (node()->isElementNode())
             if (Element* mo = static_cast<Element*>(node()))
                 text = new (renderArena()) RenderText(node(), mo->textContent().replace(hyphenMinus, minusSign).impl());
         // If we can't figure out the text, leave it blank.
@@ -296,7 +296,7 @@
 
 RenderBlock* RenderMathMLOperator::createGlyph(UChar glyph, int maxHeightForRenderer, int charRelative)
 {
-    RenderBlock* container = new (renderArena()) RenderMathMLBlock(node());
+    RenderBlock* container = new (renderArena()) RenderMathMLBlock(toElement(node()));
     toRenderMathMLBlock(container)->setIgnoreInAccessibilityTree(true);
     container->setStyle(createStackableStyle(maxHeightForRenderer));
     addChild(container);
diff --git a/Source/WebCore/rendering/mathml/RenderMathMLOperator.h b/Source/WebCore/rendering/mathml/RenderMathMLOperator.h
index 777ff11..15009cf 100644
--- a/Source/WebCore/rendering/mathml/RenderMathMLOperator.h
+++ b/Source/WebCore/rendering/mathml/RenderMathMLOperator.h
@@ -36,7 +36,8 @@
 class RenderMathMLOperator : public RenderMathMLBlock {
 public:
     RenderMathMLOperator(Element*);
-    RenderMathMLOperator(ContainerNode*, UChar operatorChar);
+    RenderMathMLOperator(Element*, UChar operatorChar);
+
     virtual bool isRenderMathMLOperator() const { return true; }
     
     virtual bool isChildAllowed(RenderObject*, RenderStyle*) const;
diff --git a/Source/WebCore/rendering/mathml/RenderMathMLRow.cpp b/Source/WebCore/rendering/mathml/RenderMathMLRow.cpp
index 698ffb8..a1438a4 100644
--- a/Source/WebCore/rendering/mathml/RenderMathMLRow.cpp
+++ b/Source/WebCore/rendering/mathml/RenderMathMLRow.cpp
@@ -36,8 +36,8 @@
 
 using namespace MathMLNames;
 
-RenderMathMLRow::RenderMathMLRow(ContainerNode* node)
-    : RenderMathMLBlock(node)
+RenderMathMLRow::RenderMathMLRow(Element* element)
+    : RenderMathMLBlock(element)
 {
 }
 
@@ -45,7 +45,8 @@
 RenderMathMLRow* RenderMathMLRow::createAnonymousWithParentRenderer(const RenderObject* parent)
 {
     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parent->style(), FLEX);
-    RenderMathMLRow* newMRow = new (parent->renderArena()) RenderMathMLRow(parent->document() /* is anonymous */);
+    RenderMathMLRow* newMRow = new (parent->renderArena()) RenderMathMLRow(0);
+    newMRow->setDocumentForAnonymous(parent->document());
     newMRow->setStyle(newStyle.release());
     return newMRow;
 }
diff --git a/Source/WebCore/rendering/mathml/RenderMathMLRow.h b/Source/WebCore/rendering/mathml/RenderMathMLRow.h
index b3ce765..9c1a1dc 100644
--- a/Source/WebCore/rendering/mathml/RenderMathMLRow.h
+++ b/Source/WebCore/rendering/mathml/RenderMathMLRow.h
@@ -34,7 +34,8 @@
     
 class RenderMathMLRow : public RenderMathMLBlock {
 public:
-    RenderMathMLRow(ContainerNode*);
+    RenderMathMLRow(Element*);
+
     static RenderMathMLRow* createAnonymousWithParentRenderer(const RenderObject*);
     
     virtual bool isRenderMathMLRow() const { return true; }
diff --git a/Source/WebCore/rendering/style/ContentData.cpp b/Source/WebCore/rendering/style/ContentData.cpp
index e184b9b..7a115b9 100644
--- a/Source/WebCore/rendering/style/ContentData.cpp
+++ b/Source/WebCore/rendering/style/ContentData.cpp
@@ -69,7 +69,7 @@
 
 RenderObject* ImageContentData::createRenderer(Document* doc, RenderStyle* pseudoStyle) const
 {
-    RenderImage* image = new (doc->renderArena()) RenderImage(doc);
+    RenderImage* image = RenderImage::createAnonymous(doc);
     image->setPseudoStyle(pseudoStyle);
     if (m_image)
         image->setImageResource(RenderImageResourceStyleImage::create(m_image.get()));
diff --git a/Source/WebCore/rendering/svg/RenderSVGBlock.cpp b/Source/WebCore/rendering/svg/RenderSVGBlock.cpp
index 9f39357..f120b99 100644
--- a/Source/WebCore/rendering/svg/RenderSVGBlock.cpp
+++ b/Source/WebCore/rendering/svg/RenderSVGBlock.cpp
@@ -31,8 +31,8 @@
 
 namespace WebCore {
 
-RenderSVGBlock::RenderSVGBlock(SVGElement* node) 
-    : RenderBlock(node)
+RenderSVGBlock::RenderSVGBlock(SVGElement* element)
+    : RenderBlock(element)
 {
 }
 
diff --git a/Source/WebCore/rendering/svg/RenderSVGInline.cpp b/Source/WebCore/rendering/svg/RenderSVGInline.cpp
index 5827528..e8dfe03 100644
--- a/Source/WebCore/rendering/svg/RenderSVGInline.cpp
+++ b/Source/WebCore/rendering/svg/RenderSVGInline.cpp
@@ -32,8 +32,8 @@
 
 namespace WebCore {
     
-RenderSVGInline::RenderSVGInline(ContainerNode* node)
-    : RenderInline(node)
+RenderSVGInline::RenderSVGInline(Element* element)
+    : RenderInline(element)
 {
     setAlwaysCreateLineBoxes();
 }
diff --git a/Source/WebCore/rendering/svg/RenderSVGInline.h b/Source/WebCore/rendering/svg/RenderSVGInline.h
index 4f604ec..dbeb0d3 100644
--- a/Source/WebCore/rendering/svg/RenderSVGInline.h
+++ b/Source/WebCore/rendering/svg/RenderSVGInline.h
@@ -30,7 +30,7 @@
 
 class RenderSVGInline : public RenderInline {
 public:
-    explicit RenderSVGInline(ContainerNode*);
+    explicit RenderSVGInline(Element*);
 
     virtual const char* renderName() const { return "RenderSVGInline"; }
     virtual bool requiresLayer() const { return false; }
diff --git a/Source/WebCore/rendering/svg/RenderSVGTSpan.cpp b/Source/WebCore/rendering/svg/RenderSVGTSpan.cpp
index d735aa8..0831b24 100644
--- a/Source/WebCore/rendering/svg/RenderSVGTSpan.cpp
+++ b/Source/WebCore/rendering/svg/RenderSVGTSpan.cpp
@@ -27,8 +27,8 @@
 
 namespace WebCore {
 
-RenderSVGTSpan::RenderSVGTSpan(ContainerNode* node)
-    : RenderSVGInline(node)
+RenderSVGTSpan::RenderSVGTSpan(Element* element)
+    : RenderSVGInline(element)
 {
 }
 
diff --git a/Source/WebCore/rendering/svg/RenderSVGTSpan.h b/Source/WebCore/rendering/svg/RenderSVGTSpan.h
index 555ce2b..bd9ce9a 100644
--- a/Source/WebCore/rendering/svg/RenderSVGTSpan.h
+++ b/Source/WebCore/rendering/svg/RenderSVGTSpan.h
@@ -28,7 +28,7 @@
 namespace WebCore {
 class RenderSVGTSpan : public RenderSVGInline {
 public:
-    explicit RenderSVGTSpan(ContainerNode*);
+    explicit RenderSVGTSpan(Element*);
     virtual const char* renderName() const { return "RenderSVGTSpan"; }
 };
 }
diff --git a/Source/WebCore/rendering/svg/RenderSVGTextPath.cpp b/Source/WebCore/rendering/svg/RenderSVGTextPath.cpp
index 95d9508..947616e 100644
--- a/Source/WebCore/rendering/svg/RenderSVGTextPath.cpp
+++ b/Source/WebCore/rendering/svg/RenderSVGTextPath.cpp
@@ -34,8 +34,8 @@
 
 namespace WebCore {
 
-RenderSVGTextPath::RenderSVGTextPath(ContainerNode* node)
-    : RenderSVGInline(node)
+RenderSVGTextPath::RenderSVGTextPath(Element* element)
+    : RenderSVGInline(element)
 {
 }
 
diff --git a/Source/WebCore/rendering/svg/RenderSVGTextPath.h b/Source/WebCore/rendering/svg/RenderSVGTextPath.h
index 12dc17d..88d931b 100644
--- a/Source/WebCore/rendering/svg/RenderSVGTextPath.h
+++ b/Source/WebCore/rendering/svg/RenderSVGTextPath.h
@@ -28,7 +28,7 @@
 
 class RenderSVGTextPath : public RenderSVGInline {
 public:
-    RenderSVGTextPath(ContainerNode*);
+    RenderSVGTextPath(Element*);
 
     Path layoutPath() const;
     float startOffset() const;
diff --git a/Source/WebKit/chromium/tests/RenderTableCellTest.cpp b/Source/WebKit/chromium/tests/RenderTableCellTest.cpp
index b4c554a..56c201b 100644
--- a/Source/WebKit/chromium/tests/RenderTableCellTest.cpp
+++ b/Source/WebKit/chromium/tests/RenderTableCellTest.cpp
@@ -72,7 +72,7 @@
 
     virtual void SetUp()
     {
-        m_cell = new (arena()) RenderTableCell(document());
+        m_cell = RenderTableCell::createAnonymous(document());
     }
 
     virtual void TearDown()
diff --git a/Source/WebKit/chromium/tests/RenderTableRowTest.cpp b/Source/WebKit/chromium/tests/RenderTableRowTest.cpp
index a5ee2a3..aa61bd9 100644
--- a/Source/WebKit/chromium/tests/RenderTableRowTest.cpp
+++ b/Source/WebKit/chromium/tests/RenderTableRowTest.cpp
@@ -72,7 +72,7 @@
 
     virtual void SetUp()
     {
-        m_row = new (arena()) RenderTableRow(document());
+        m_row = RenderTableRow::createAnonymous(document());
     }
 
     virtual void TearDown()