Index: third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc |
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc |
index d99a083a6a3f9d68818c176646be1dbe5b9c46a6..9f18afb05aa2ce6601febc4d27578ade89012369 100644 |
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc |
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc |
@@ -66,13 +66,26 @@ NGInlineLayoutAlgorithm::NGInlineLayoutAlgorithm( |
is_bidi_reordered_(false) |
#endif |
{ |
+ container_builder_.MutableUnpositionedFloats() = space->UnpositionedFloats(); |
+ |
+ // TODO(crbug.com/716930): We may be an empty LayoutInline due to splitting. |
+ // Only resolve our BFC offset if we know that we are non-empty as we may |
+ // need to pass through our margin strut. |
+ if (!inline_node->Items().IsEmpty()) { |
+ NGLogicalOffset bfc_offset = ConstraintSpace().BfcOffset(); |
+ bfc_offset.block_offset += ConstraintSpace().MarginStrut().Sum(); |
+ MaybeUpdateFragmentBfcOffset(ConstraintSpace(), bfc_offset, |
+ &container_builder_); |
+ PositionPendingFloats(bfc_offset.block_offset, &container_builder_, |
+ MutableConstraintSpace()); |
+ } |
+ |
if (!is_horizontal_writing_mode_) |
baseline_type_ = FontBaseline::kIdeographicBaseline; |
if (break_token) |
Initialize(break_token->ItemIndex(), break_token->TextOffset()); |
else |
Initialize(0, 0); |
- container_builder_.MutableUnpositionedFloats() = space->UnpositionedFloats(); |
} |
bool NGInlineLayoutAlgorithm::IsFirstLine() const { |
@@ -243,18 +256,6 @@ bool NGInlineLayoutAlgorithm::CreateLine() { |
bool NGInlineLayoutAlgorithm::CreateLineUpToLastBreakOpportunity() { |
const Vector<NGInlineItem>& items = Node()->Items(); |
- // TODO(crbug.com/716930): We may be an empty LayoutInline due to splitting. |
- // Only resolve our BFC offset if we know that we are non-empty as we may |
- // need to pass through our margin strut. |
- if (!items.IsEmpty()) { |
- NGLogicalOffset bfc_offset = ConstraintSpace().BfcOffset(); |
- bfc_offset.block_offset += ConstraintSpace().MarginStrut().Sum(); |
- MaybeUpdateFragmentBfcOffset(ConstraintSpace(), bfc_offset, |
- &container_builder_); |
- PositionPendingFloats(bfc_offset.block_offset, &container_builder_, |
- MutableConstraintSpace()); |
- } |
- |
// Create a list of LineItemChunk from |start| and |last_break_opportunity|. |
// TODO(kojii): Consider refactoring LineItemChunk once NGLineBuilder's public |
// API is more finalized. It does not fit well with the current API. |
@@ -551,6 +552,8 @@ LayoutUnit NGInlineLayoutAlgorithm::PlaceAtomicInline( |
void NGInlineLayoutAlgorithm::FindNextLayoutOpportunity() { |
NGLogicalOffset iter_offset = ConstraintSpace().BfcOffset(); |
+ if (container_builder_.BfcOffset()) |
+ iter_offset = ContainerBfcOffset(); |
iter_offset.block_offset += content_size_; |
auto* iter = MutableConstraintSpace()->LayoutOpportunityIterator(iter_offset); |
NGLayoutOpportunity opportunity = iter->Next(); |