Index: third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc |
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc |
index 9dae0ce353e93100f5433eb0e85a0df1ea1b7238..4220e3360e243111b46c5b24d74c4e8a023b654b 100644 |
--- a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc |
+++ b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc |
@@ -83,19 +83,31 @@ void MaybeUpdateFragmentBfcOffset(const NGConstraintSpace& space, |
} |
} |
-void PositionPendingFloats(LayoutUnit origin_block_offset, |
- NGFragmentBuilder* container_builder, |
- NGConstraintSpace* space) { |
+void PositionPendingFloatsFromOffset(LayoutUnit origin_block_offset, |
+ LayoutUnit from_block_offset, |
+ NGFragmentBuilder* container_builder, |
+ NGConstraintSpace* space) { |
DCHECK(container_builder->BfcOffset()) |
<< "Parent BFC offset should be known here"; |
const auto& floating_objects = container_builder->UnpositionedFloats(); |
- PositionFloats(origin_block_offset, |
+ PositionFloats(origin_block_offset, from_block_offset, |
container_builder->BfcOffset().value().block_offset, |
floating_objects, space); |
container_builder->MutablePositionedFloats().AppendVector(floating_objects); |
container_builder->MutableUnpositionedFloats().clear(); |
} |
+void PositionPendingFloats(LayoutUnit origin_block_offset, |
+ NGFragmentBuilder* container_builder, |
+ NGConstraintSpace* space) { |
+ DCHECK(container_builder->BfcOffset()) |
+ << "Parent BFC offset should be known here"; |
+ LayoutUnit from_block_offset = |
+ container_builder->BfcOffset().value().block_offset; |
+ PositionPendingFloatsFromOffset(origin_block_offset, from_block_offset, |
+ container_builder, space); |
+} |
+ |
NGBlockLayoutAlgorithm::NGBlockLayoutAlgorithm(NGBlockNode* node, |
NGConstraintSpace* space, |
NGBlockBreakToken* break_token) |
@@ -380,7 +392,7 @@ void NGBlockLayoutAlgorithm::FinishChildLayout( |
else if (fragment.BfcOffset()) |
child_bfc_offset = PositionWithBfcOffset(fragment); |
else if (container_builder_.BfcOffset()) |
- child_bfc_offset = PositionWithParentBfc(); |
+ child_bfc_offset = PositionWithParentBfc(*child_space); |
NGLogicalOffset logical_offset = CalculateLogicalOffset(child_bfc_offset); |
@@ -414,6 +426,7 @@ NGLogicalOffset NGBlockLayoutAlgorithm::PositionNewFc( |
.SetIsNewFormattingContext(false) |
.ToConstraintSpace(child_space.WritingMode()); |
PositionFloats(curr_bfc_offset_.block_offset, curr_bfc_offset_.block_offset, |
+ curr_bfc_offset_.block_offset, |
container_builder_.UnpositionedFloats(), tmp_space.Get()); |
// 2. Find an estimated layout opportunity for our fragment. |
@@ -456,10 +469,15 @@ NGLogicalOffset NGBlockLayoutAlgorithm::PositionWithBfcOffset( |
return fragment.BfcOffset().value(); |
} |
-NGLogicalOffset NGBlockLayoutAlgorithm::PositionWithParentBfc() { |
+NGLogicalOffset NGBlockLayoutAlgorithm::PositionWithParentBfc( |
+ const NGConstraintSpace& space) { |
curr_bfc_offset_ += |
{border_and_padding_.inline_start + curr_child_margins_.inline_start, |
curr_margin_strut_.Sum()}; |
+ AdjustToClearance(space.ClearanceOffset(), &curr_bfc_offset_); |
+ PositionPendingFloatsFromOffset( |
+ curr_bfc_offset_.block_offset, curr_bfc_offset_.block_offset, |
+ &container_builder_, MutableConstraintSpace()); |
return curr_bfc_offset_; |
} |