Diff
Modified: trunk/LayoutTests/ChangeLog (116173 => 116174)
--- trunk/LayoutTests/ChangeLog 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/LayoutTests/ChangeLog 2012-05-04 21:33:51 UTC (rev 116174)
@@ -1,3 +1,13 @@
+2012-05-04 Abhishek Arya <[email protected]>
+
+ ASSERT(beforeChildAnonymousContainer->isTable()); fails in RenderBlock::addChildIgnoringAnonymousColumnBlocks.
+ https://bugs.webkit.org/show_bug.cgi?id=84606
+
+ Reviewed by Julien Chaffraix.
+
+ * fast/block/block-add-child-crash-expected.txt: Added.
+ * fast/block/block-add-child-crash.html: Added.
+
2012-05-04 Andy Estes <[email protected]>
[Mac] IETC flexbox reference tests have pixel differences (due to embedded color profiles?)
Added: trunk/LayoutTests/fast/block/block-add-child-crash-expected.txt (0 => 116174)
--- trunk/LayoutTests/fast/block/block-add-child-crash-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/block/block-add-child-crash-expected.txt 2012-05-04 21:33:51 UTC (rev 116174)
@@ -0,0 +1,3 @@
+WebKit Bug 84606 - ASSERT(beforeChildAnonymousContainer->isTable()); fails in RenderBlock::addChildIgnoringAnonymousColumnBlocks.
+The test passes if it doesn't CRASH nor ASSERT.
+PASS
Added: trunk/LayoutTests/fast/block/block-add-child-crash.html (0 => 116174)
--- trunk/LayoutTests/fast/block/block-add-child-crash.html (rev 0)
+++ trunk/LayoutTests/fast/block/block-add-child-crash.html 2012-05-04 21:33:51 UTC (rev 116174)
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<body>
+WebKit Bug 84606 - ASSERT(beforeChildAnonymousContainer->isTable()); fails in RenderBlock::addChildIgnoringAnonymousColumnBlocks.<br />
+The test passes if it doesn't CRASH nor ASSERT.
+<style>
+.container { -webkit-column-count: 1; }
+.columnSpan { -webkit-column-span: all; }
+</style>
+<li class="container">
+<blockquote id="test">
+<table class="columnSpan"></table>
+</blockquote>
+<textarea></textarea>
+</li>
+<script>
+if (window.layoutTestController)
+ layoutTestController.dumpAsText();
+
+document.body.offsetTop;
+var test = document.getElementById("test");
+test.outerHTML = "PASS";
+</script>
+</body>
+</html>
Property changes on: trunk/LayoutTests/fast/block/block-add-child-crash.html
___________________________________________________________________
Added: svn:executable
Modified: trunk/Source/WebCore/ChangeLog (116173 => 116174)
--- trunk/Source/WebCore/ChangeLog 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/Source/WebCore/ChangeLog 2012-05-04 21:33:51 UTC (rev 116174)
@@ -1,3 +1,50 @@
+2012-05-04 Abhishek Arya <[email protected]>
+
+ ASSERT(beforeChildAnonymousContainer->isTable()); fails in RenderBlock::addChildIgnoringAnonymousColumnBlocks.
+ https://bugs.webkit.org/show_bug.cgi?id=84606
+
+ Reviewed by Julien Chaffraix.
+
+ RenderBlock::removeChild forgot to set display on the anonymous block, causing it
+ to display as INLINE. To prevent this kind of failure in future, we replace
+ createAnonymousStyle with createAnonymousStyleWithDisplay to make everyone explictly
+ pass display as the argument.
+
+ Test: fast/block/block-add-child-crash.html
+
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::removeChild):
+ (WebCore::RenderBlock::createAnonymousWithParentRendererAndDisplay):
+ (WebCore::RenderBlock::createAnonymousColumnsWithParentRenderer):
+ (WebCore::RenderBlock::createAnonymousColumnSpanWithParentRenderer):
+ * rendering/RenderInline.cpp:
+ (WebCore::updateStyleOfAnonymousBlockContinuations):
+ (WebCore::RenderInline::addChildIgnoringContinuation):
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::propagateStyleToAnonymousChildren):
+ * rendering/RenderRuby.cpp:
+ (WebCore::createAnonymousRubyInlineBlock):
+ * rendering/RenderRubyRun.cpp:
+ (WebCore::RenderRubyRun::createRubyBase):
+ (WebCore::RenderRubyRun::staticCreateRubyRun):
+ * rendering/RenderTable.cpp:
+ (WebCore::RenderTable::createAnonymousWithParentRenderer):
+ * rendering/RenderTableCell.cpp:
+ (WebCore::RenderTableCell::createAnonymousWithParentRenderer):
+ * rendering/RenderTableRow.cpp:
+ (WebCore::RenderTableRow::createAnonymousWithParentRenderer):
+ * rendering/RenderTableSection.cpp:
+ (WebCore::RenderTableSection::createAnonymousWithParentRenderer):
+ * rendering/mathml/RenderMathMLBlock.cpp:
+ (WebCore::RenderMathMLBlock::createAlmostAnonymousBlock):
+ * rendering/mathml/RenderMathMLRow.cpp:
+ (WebCore::RenderMathMLRow::createAnonymousWithParentRenderer):
+ * rendering/mathml/RenderMathMLSubSup.cpp:
+ (WebCore::RenderMathMLSubSup::addChild):
+ * rendering/style/RenderStyle.cpp:
+ (WebCore::RenderStyle::createAnonymousStyleWithDisplay):
+ * rendering/style/RenderStyle.h:
+
2012-04-27 Erik Arvidsson <[email protected]>
WebKit IDL does not use exception syntax
Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (116173 => 116174)
--- trunk/Source/WebCore/rendering/RenderBlock.cpp 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp 2012-05-04 21:33:51 UTC (rev 116174)
@@ -1167,7 +1167,7 @@
// to clear out inherited column properties by just making a new style, and to also clear the
// column span flag if it is set.
ASSERT(!inlineChildrenBlock->continuation());
- RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(style());
+ RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(style(), BLOCK);
children()->removeChildNode(this, inlineChildrenBlock, inlineChildrenBlock->hasLayer());
inlineChildrenBlock->setStyle(newStyle);
@@ -7237,28 +7237,27 @@
RenderBlock* RenderBlock::createAnonymousWithParentRendererAndDisplay(const RenderObject* parent, EDisplay display)
{
- RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parent->style());
-
// FIXME: Do we need to cover the new flex box here ?
// FIXME: Do we need to convert all our inline displays to block-type in the anonymous logic ?
+ EDisplay newDisplay;
RenderBlock* newBox = 0;
if (display == BOX || display == INLINE_BOX) {
- newStyle->setDisplay(BOX);
newBox = new (parent->renderArena()) RenderDeprecatedFlexibleBox(parent->document() /* anonymous box */);
+ newDisplay = BOX;
} else {
- newStyle->setDisplay(BLOCK);
newBox = new (parent->renderArena()) RenderBlock(parent->document() /* anonymous box */);
+ newDisplay = BLOCK;
}
+ RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parent->style(), newDisplay);
newBox->setStyle(newStyle.release());
return newBox;
}
RenderBlock* RenderBlock::createAnonymousColumnsWithParentRenderer(const RenderObject* parent)
{
- RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parent->style());
+ RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parent->style(), BLOCK);
newStyle->inheritColumnPropertiesFrom(parent->style());
- newStyle->setDisplay(BLOCK);
RenderBlock* newBox = new (parent->renderArena()) RenderBlock(parent->document() /* anonymous box */);
newBox->setStyle(newStyle.release());
@@ -7267,9 +7266,8 @@
RenderBlock* RenderBlock::createAnonymousColumnSpanWithParentRenderer(const RenderObject* parent)
{
- RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parent->style());
+ RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parent->style(), BLOCK);
newStyle->setColumnSpan(ColumnSpanAll);
- newStyle->setDisplay(BLOCK);
RenderBlock* newBox = new (parent->renderArena()) RenderBlock(parent->document() /* anonymous box */);
newBox->setStyle(newStyle.release());
Modified: trunk/Source/WebCore/rendering/RenderInline.cpp (116173 => 116174)
--- trunk/Source/WebCore/rendering/RenderInline.cpp 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/Source/WebCore/rendering/RenderInline.cpp 2012-05-04 21:33:51 UTC (rev 116174)
@@ -146,9 +146,8 @@
RenderInline* cont = toRenderBlock(block)->inlineElementContinuation();
if (oldStyle->position() == RelativePosition && hasRelPositionedInlineAncestor(cont))
continue;
- RefPtr<RenderStyle> blockStyle = RenderStyle::createAnonymousStyle(block->style());
+ RefPtr<RenderStyle> blockStyle = RenderStyle::createAnonymousStyleWithDisplay(block->style(), BLOCK);
blockStyle->setPosition(newStyle->position());
- blockStyle->setDisplay(BLOCK);
block->setStyle(blockStyle);
}
}
@@ -281,8 +280,7 @@
// inline into continuations. This involves creating an anonymous block box to hold
// |newChild|. We then make that block box a continuation of this inline. We take all of
// the children after |beforeChild| and put them in a clone of this object.
- RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(style());
- newStyle->setDisplay(BLOCK);
+ RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(style(), BLOCK);
// If inside an inline affected by relative positioning the block needs to be affected by it too.
// Giving the block a layer like this allows it to collect the x/y offsets from inline parents later.
Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (116173 => 116174)
--- trunk/Source/WebCore/rendering/RenderObject.cpp 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp 2012-05-04 21:33:51 UTC (rev 116174)
@@ -1955,7 +1955,7 @@
continue;
#endif
- RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(style());
+ RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(style(), child->style()->display());
if (style()->specifiesColumns()) {
if (child->style()->specifiesColumns())
newStyle->inheritColumnPropertiesFrom(style());
@@ -1968,7 +1968,6 @@
if (child->isRelPositioned() && toRenderBlock(child)->isAnonymousBlockContinuation())
newStyle->setPosition(child->style()->position());
- newStyle->setDisplay(child->style()->display());
child->setStyle(newStyle.release());
}
}
Modified: trunk/Source/WebCore/rendering/RenderRuby.cpp (116173 => 116174)
--- trunk/Source/WebCore/rendering/RenderRuby.cpp 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/Source/WebCore/rendering/RenderRuby.cpp 2012-05-04 21:33:51 UTC (rev 116174)
@@ -84,9 +84,7 @@
static RenderBlock* createAnonymousRubyInlineBlock(RenderObject* ruby)
{
- RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(ruby->style());
- newStyle->setDisplay(INLINE_BLOCK);
-
+ RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(ruby->style(), INLINE_BLOCK);
RenderBlock* newBlock = new (ruby->renderArena()) RenderBlock(ruby->document() /* anonymous box */);
newBlock->setStyle(newStyle.release());
return newBlock;
Modified: trunk/Source/WebCore/rendering/RenderRubyRun.cpp (116173 => 116174)
--- trunk/Source/WebCore/rendering/RenderRubyRun.cpp 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/Source/WebCore/rendering/RenderRubyRun.cpp 2012-05-04 21:33:51 UTC (rev 116174)
@@ -199,8 +199,7 @@
RenderRubyBase* RenderRubyRun::createRubyBase() const
{
RenderRubyBase* rb = new (renderArena()) RenderRubyBase(document() /* anonymous */);
- RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(style());
- newStyle->setDisplay(BLOCK);
+ RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(style(), BLOCK);
newStyle->setTextAlign(CENTER); // FIXME: use WEBKIT_CENTER?
rb->setStyle(newStyle.release());
return rb;
@@ -210,8 +209,7 @@
{
ASSERT(parentRuby && parentRuby->isRuby());
RenderRubyRun* rr = new (parentRuby->renderArena()) RenderRubyRun(parentRuby->document() /* anonymous */);
- RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parentRuby->style());
- newStyle->setDisplay(INLINE_BLOCK);
+ RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parentRuby->style(), INLINE_BLOCK);
rr->setStyle(newStyle.release());
return rr;
}
Modified: trunk/Source/WebCore/rendering/RenderTable.cpp (116173 => 116174)
--- trunk/Source/WebCore/rendering/RenderTable.cpp 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/Source/WebCore/rendering/RenderTable.cpp 2012-05-04 21:33:51 UTC (rev 116174)
@@ -1282,9 +1282,7 @@
RenderTable* RenderTable::createAnonymousWithParentRenderer(const RenderObject* parent)
{
- RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parent->style());
- newStyle->setDisplay(TABLE);
-
+ RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parent->style(), TABLE);
RenderTable* newTable = new (parent->renderArena()) RenderTable(parent->document() /* is anonymous */);
newTable->setStyle(newStyle.release());
return newTable;
Modified: trunk/Source/WebCore/rendering/RenderTableCell.cpp (116173 => 116174)
--- trunk/Source/WebCore/rendering/RenderTableCell.cpp 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/Source/WebCore/rendering/RenderTableCell.cpp 2012-05-04 21:33:51 UTC (rev 116174)
@@ -1113,9 +1113,7 @@
RenderTableCell* RenderTableCell::createAnonymousWithParentRenderer(const RenderObject* parent)
{
- RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parent->style());
- newStyle->setDisplay(TABLE_CELL);
-
+ 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;
Modified: trunk/Source/WebCore/rendering/RenderTableRow.cpp (116173 => 116174)
--- trunk/Source/WebCore/rendering/RenderTableRow.cpp 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/Source/WebCore/rendering/RenderTableRow.cpp 2012-05-04 21:33:51 UTC (rev 116174)
@@ -247,9 +247,7 @@
RenderTableRow* RenderTableRow::createAnonymousWithParentRenderer(const RenderObject* parent)
{
- RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parent->style());
- newStyle->setDisplay(TABLE_ROW);
-
+ 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;
Modified: trunk/Source/WebCore/rendering/RenderTableSection.cpp (116173 => 116174)
--- trunk/Source/WebCore/rendering/RenderTableSection.cpp 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/Source/WebCore/rendering/RenderTableSection.cpp 2012-05-04 21:33:51 UTC (rev 116174)
@@ -1410,9 +1410,7 @@
RenderTableSection* RenderTableSection::createAnonymousWithParentRenderer(const RenderObject* parent)
{
- RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parent->style());
- newStyle->setDisplay(TABLE_ROW_GROUP);
-
+ RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parent->style(), TABLE_ROW_GROUP);
RenderTableSection* newSection = new (parent->renderArena()) RenderTableSection(parent->document() /* is anonymous */);
newSection->setStyle(newStyle.release());
return newSection;
Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp (116173 => 116174)
--- trunk/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp 2012-05-04 21:33:51 UTC (rev 116174)
@@ -148,9 +148,7 @@
RenderMathMLBlock* RenderMathMLBlock::createAlmostAnonymousBlock(EDisplay display)
{
- RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(style());
- newStyle->setDisplay(display);
-
+ RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(style(), display);
RenderMathMLBlock* newBlock = new (renderArena()) RenderMathMLBlock(node() /* "almost" anonymous block */);
newBlock->setStyle(newStyle.release());
return newBlock;
Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLRow.cpp (116173 => 116174)
--- trunk/Source/WebCore/rendering/mathml/RenderMathMLRow.cpp 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLRow.cpp 2012-05-04 21:33:51 UTC (rev 116174)
@@ -44,9 +44,7 @@
// FIXME: Change all these createAnonymous... routines to return a PassOwnPtr<>.
RenderMathMLRow* RenderMathMLRow::createAnonymousWithParentRenderer(const RenderObject* parent)
{
- RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parent->style());
- newStyle->setDisplay(INLINE_BLOCK);
-
+ RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parent->style(), INLINE_BLOCK);
RenderMathMLRow* newMRow = new (parent->renderArena()) RenderMathMLRow(parent->document() /* is anonymous */);
newMRow->setStyle(newStyle.release());
return newMRow;
Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLSubSup.cpp (116173 => 116174)
--- trunk/Source/WebCore/rendering/mathml/RenderMathMLSubSup.cpp 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLSubSup.cpp 2012-05-04 21:33:51 UTC (rev 116174)
@@ -76,8 +76,7 @@
// Make sure we have a script block for rendering.
if (m_kind == SubSup && !m_scripts) {
- RefPtr<RenderStyle> scriptsStyle = RenderStyle::createAnonymousStyle(style());
- scriptsStyle->setDisplay(INLINE_BLOCK);
+ RefPtr<RenderStyle> scriptsStyle = RenderStyle::createAnonymousStyleWithDisplay(style(), INLINE_BLOCK);
scriptsStyle->setVerticalAlign(TOP);
scriptsStyle->setMarginLeft(Length(gSubsupScriptMargin, Fixed));
scriptsStyle->setTextAlign(LEFT);
Modified: trunk/Source/WebCore/rendering/style/RenderStyle.cpp (116173 => 116174)
--- trunk/Source/WebCore/rendering/style/RenderStyle.cpp 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.cpp 2012-05-04 21:33:51 UTC (rev 116174)
@@ -87,11 +87,12 @@
return adoptRef(new RenderStyle(true));
}
-PassRefPtr<RenderStyle> RenderStyle::createAnonymousStyle(const RenderStyle* parentStyle)
+PassRefPtr<RenderStyle> RenderStyle::createAnonymousStyleWithDisplay(const RenderStyle* parentStyle, EDisplay display)
{
RefPtr<RenderStyle> newStyle = RenderStyle::create();
newStyle->inheritFrom(parentStyle);
newStyle->inheritUnicodeBidiFrom(parentStyle);
+ newStyle->setDisplay(display);
return newStyle;
}
Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (116173 => 116174)
--- trunk/Source/WebCore/rendering/style/RenderStyle.h 2012-05-04 21:30:52 UTC (rev 116173)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h 2012-05-04 21:33:51 UTC (rev 116174)
@@ -390,7 +390,7 @@
public:
static PassRefPtr<RenderStyle> create();
static PassRefPtr<RenderStyle> createDefaultStyle();
- static PassRefPtr<RenderStyle> createAnonymousStyle(const RenderStyle* parentStyle);
+ static PassRefPtr<RenderStyle> createAnonymousStyleWithDisplay(const RenderStyle* parentStyle, EDisplay);
static PassRefPtr<RenderStyle> clone(const RenderStyle*);
void inheritFrom(const RenderStyle* inheritParent);