Index: Source/core/layout/LayoutDeprecatedFlexibleBox.cpp |
diff --git a/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp b/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp |
index 4761a008c0ab2ddf0ef670f19b5d0402fa7faf49..840c0d0831d0f5f4e117de7c550447bf7ff4917b 100644 |
--- a/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp |
+++ b/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp |
@@ -400,12 +400,15 @@ void LayoutDeprecatedFlexibleBox::layoutHorizontalBox(bool relayoutChildren) |
SubtreeLayoutScope layoutScope(*child); |
- // We need to see if this child's height has changed, since we make block elements |
- // fill the height of a containing box by default. |
- // Now do a layout. |
- LayoutUnit oldChildHeight = child->size().height(); |
- child->updateLogicalHeight(); |
- if (oldChildHeight != child->size().height()) |
+ // We need to see if this child's height will change, since we make block elements fill |
+ // the height of a containing box by default. We cannot actually *set* the new height |
+ // here, though. Need to do that from within layout, or we won't be able to detect the |
+ // change and duly notify any positioned descendants that are affected by it. |
+ LayoutUnit oldChildHeight = child->logicalHeight(); |
+ LogicalExtentComputedValues computedValues; |
+ child->computeLogicalHeight(child->logicalHeight(), child->logicalTop(), computedValues); |
+ LayoutUnit newChildHeight = computedValues.m_extent; |
+ if (oldChildHeight != newChildHeight) |
layoutScope.setChildNeedsLayout(child); |
if (!child->needsLayout()) |