From bd441758d6681cbd0554130d0038b4726514e279 Mon Sep 17 00:00:00 2001 From: "mitz@apple.com" Date: Mon, 19 Dec 2011 02:51:46 +0000 Subject: [PATCH] Positioned Floats: Assertion hit in fast/block/positioning/positioned-float-layout-after-image-load.html https://bugs.webkit.org/show_bug.cgi?id=67759 Reviewed by Darin Adler. Source/WebCore: Test: fast/block/positioning/positioned-float-layout-after-image-load.html Positioned floats are both floating and positioned. Made the following functions treat them as positioned rather than as floats by reordering code. * rendering/RenderBlockLineLayout.cpp: (WebCore::RenderBlock::LineBreaker::skipTrailingWhitespace): (WebCore::RenderBlock::LineBreaker::skipLeadingWhitespace): (WebCore::RenderBlock::LineBreaker::nextLineBreak): LayoutTests: Re-added this test from r94695. * fast/block/positioning/positioned-float-layout-after-image-load-expected.txt: Copied from LayoutTests/fast/block/positioning/positioned-float-layout-after-image-load-expected.txt. * fast/block/positioning/positioned-float-layout-after-image-load.html: Copied from LayoutTests/fast/block/positioning/positioned-float-layout-after-image-load.html. * fast/block/positioning/resources/positioned-float-layout-after-image-load-2.html: Copied from LayoutTests/fast/block/positioning/resources/positioned-float-layout-after-image-load-2.html. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@103206 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- LayoutTests/ChangeLog | 13 ++++++ ...float-layout-after-image-load-expected.txt | 3 ++ ...itioned-float-layout-after-image-load.html | 21 ++++++++++ ...ioned-float-layout-after-image-load-2.html | 36 ++++++++++++++++ Source/WebCore/ChangeLog | 17 ++++++++ .../rendering/RenderBlockLineLayout.cpp | 42 +++++++++---------- 6 files changed, 111 insertions(+), 21 deletions(-) create mode 100644 LayoutTests/fast/block/positioning/positioned-float-layout-after-image-load-expected.txt create mode 100644 LayoutTests/fast/block/positioning/positioned-float-layout-after-image-load.html create mode 100644 LayoutTests/fast/block/positioning/resources/positioned-float-layout-after-image-load-2.html diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog index 9d5a51f22a51..b1a00210aaff 100644 --- a/LayoutTests/ChangeLog +++ b/LayoutTests/ChangeLog @@ -1,3 +1,16 @@ +2011-12-18 Dan Bernstein + + Positioned Floats: Assertion hit in fast/block/positioning/positioned-float-layout-after-image-load.html + https://bugs.webkit.org/show_bug.cgi?id=67759 + + Reviewed by Darin Adler. + + Re-added this test from r94695. + + * fast/block/positioning/positioned-float-layout-after-image-load-expected.txt: Copied from LayoutTests/fast/block/positioning/positioned-float-layout-after-image-load-expected.txt. + * fast/block/positioning/positioned-float-layout-after-image-load.html: Copied from LayoutTests/fast/block/positioning/positioned-float-layout-after-image-load.html. + * fast/block/positioning/resources/positioned-float-layout-after-image-load-2.html: Copied from LayoutTests/fast/block/positioning/resources/positioned-float-layout-after-image-load-2.html. + 2011-12-18 Hajime Morrita Unreviewed expectations update. diff --git a/LayoutTests/fast/block/positioning/positioned-float-layout-after-image-load-expected.txt b/LayoutTests/fast/block/positioning/positioned-float-layout-after-image-load-expected.txt new file mode 100644 index 000000000000..64e2ca513651 --- /dev/null +++ b/LayoutTests/fast/block/positioning/positioned-float-layout-after-image-load-expected.txt @@ -0,0 +1,3 @@ + +[1] +SUCCESS diff --git a/LayoutTests/fast/block/positioning/positioned-float-layout-after-image-load.html b/LayoutTests/fast/block/positioning/positioned-float-layout-after-image-load.html new file mode 100644 index 000000000000..4263e182a1bd --- /dev/null +++ b/LayoutTests/fast/block/positioning/positioned-float-layout-after-image-load.html @@ -0,0 +1,21 @@ + + + + + + + diff --git a/LayoutTests/fast/block/positioning/resources/positioned-float-layout-after-image-load-2.html b/LayoutTests/fast/block/positioning/resources/positioned-float-layout-after-image-load-2.html new file mode 100644 index 000000000000..21f150c314b0 --- /dev/null +++ b/LayoutTests/fast/block/positioning/resources/positioned-float-layout-after-image-load-2.html @@ -0,0 +1,36 @@ + + + + + + + + +
+ Book cover. +
+ + + +
FAILURE
+ + diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index d5a5f0bde6ee..a4917e63483b 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,20 @@ +2011-12-18 Dan Bernstein + + Positioned Floats: Assertion hit in fast/block/positioning/positioned-float-layout-after-image-load.html + https://bugs.webkit.org/show_bug.cgi?id=67759 + + Reviewed by Darin Adler. + + Test: fast/block/positioning/positioned-float-layout-after-image-load.html + + Positioned floats are both floating and positioned. Made the following functions treat them as + positioned rather than as floats by reordering code. + + * rendering/RenderBlockLineLayout.cpp: + (WebCore::RenderBlock::LineBreaker::skipTrailingWhitespace): + (WebCore::RenderBlock::LineBreaker::skipLeadingWhitespace): + (WebCore::RenderBlock::LineBreaker::nextLineBreak): + 2011-12-18 Benjamin Poulain Add support for 8 bits strings to Document::isValidName() diff --git a/Source/WebCore/rendering/RenderBlockLineLayout.cpp b/Source/WebCore/rendering/RenderBlockLineLayout.cpp index 178081bc4fe1..ad5b9bc9033f 100755 --- a/Source/WebCore/rendering/RenderBlockLineLayout.cpp +++ b/Source/WebCore/rendering/RenderBlockLineLayout.cpp @@ -1861,10 +1861,10 @@ void RenderBlock::LineBreaker::skipTrailingWhitespace(InlineIterator& iterator, { while (!iterator.atEnd() && !requiresLineBox(iterator, lineInfo, TrailingWhitespace)) { RenderObject* object = iterator.m_obj; - if (object->isFloating()) { - m_block->insertFloatingObject(toRenderBox(object)); - } else if (object->isPositioned()) + if (object->isPositioned()) setStaticPositions(m_block, toRenderBox(object)); + else if (object->isFloating()) + m_block->insertFloatingObject(toRenderBox(object)); iterator.increment(); } } @@ -1874,10 +1874,10 @@ void RenderBlock::LineBreaker::skipLeadingWhitespace(InlineBidiResolver& resolve { while (!resolver.position().atEnd() && !requiresLineBox(resolver.position(), lineInfo, LeadingWhitespace)) { RenderObject* object = resolver.position().m_obj; - if (object->isFloating()) - m_block->positionNewFloatOnLine(m_block->insertFloatingObject(toRenderBox(object)), lastFloatFromPreviousLine, lineInfo, width); - else if (object->isPositioned()) + if (object->isPositioned()) setStaticPositions(m_block, toRenderBox(object)); + else if (object->isFloating()) + m_block->positionNewFloatOnLine(m_block->insertFloatingObject(toRenderBox(object)), lastFloatFromPreviousLine, lineInfo, width); resolver.increment(); } resolver.commitExplicitEmbedding(); @@ -2156,21 +2156,7 @@ InlineIterator RenderBlock::LineBreaker::nextLineBreak(InlineBidiResolver& resol goto end; } - if (current.m_obj->isFloating()) { - RenderBox* floatBox = toRenderBox(current.m_obj); - FloatingObject* f = m_block->insertFloatingObject(floatBox); - // check if it fits in the current line. - // If it does, position it now, otherwise, position - // it after moving to next line (in newLine() func) - if (floatsFitOnLine && width.fitsOnLine(m_block->logicalWidthForFloat(f))) { - m_block->positionNewFloatOnLine(f, lastFloatFromPreviousLine, lineInfo, width); - if (lBreak.m_obj == current.m_obj) { - ASSERT(!lBreak.m_pos); - lBreak.increment(); - } - } else - floatsFitOnLine = false; - } else if (current.m_obj->isPositioned()) { + if (current.m_obj->isPositioned()) { // If our original display wasn't an inline type, then we can // go ahead and determine our static inline position now. RenderBox* box = toRenderBox(current.m_obj); @@ -2195,6 +2181,20 @@ InlineIterator RenderBlock::LineBreaker::nextLineBreak(InlineBidiResolver& resol trailingObjects.appendBoxIfNeeded(box); } else m_positionedObjects.append(box); + } else if (current.m_obj->isFloating()) { + RenderBox* floatBox = toRenderBox(current.m_obj); + FloatingObject* f = m_block->insertFloatingObject(floatBox); + // check if it fits in the current line. + // If it does, position it now, otherwise, position + // it after moving to next line (in newLine() func) + if (floatsFitOnLine && width.fitsOnLine(m_block->logicalWidthForFloat(f))) { + m_block->positionNewFloatOnLine(f, lastFloatFromPreviousLine, lineInfo, width); + if (lBreak.m_obj == current.m_obj) { + ASSERT(!lBreak.m_pos); + lBreak.increment(); + } + } else + floatsFitOnLine = false; } else if (current.m_obj->isRenderInline()) { // Right now, we should only encounter empty inlines here. ASSERT(!current.m_obj->firstChild()); -- 2.36.0