| Index: third_party/WebKit/Source/core/layout/ng/inline/ng_inline_box_state.cc
|
| diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_box_state.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_box_state.cc
|
| index 5a5b9895d107d439c3e83c19cbb1d2feefa1ec18..4a35415f18f66afff821be736310a6c7a64d574c 100644
|
| --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_box_state.cc
|
| +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_box_state.cc
|
| @@ -52,8 +52,11 @@ NGInlineBoxState* NGInlineLayoutStateStack::OnBeginPlaceItems(
|
| for (auto& box : stack_) {
|
| box.fragment_start = 0;
|
| box.metrics = NGLineHeightMetrics();
|
| - // Existing box states are wrapped boxes, and hence no left edges.
|
| - box.border_edges.line_left = false;
|
| + if (box.needs_box_fragment) {
|
| + box.line_left_position = LayoutUnit();
|
| + // Existing box states are wrapped boxes, and hence no left edges.
|
| + box.border_edges.line_left = false;
|
| + }
|
| DCHECK(box.pending_descendants.IsEmpty());
|
| }
|
| }
|
| @@ -72,12 +75,20 @@ NGInlineBoxState* NGInlineLayoutStateStack::OnBeginPlaceItems(
|
|
|
| NGInlineBoxState* NGInlineLayoutStateStack::OnOpenTag(
|
| const NGInlineItem& item,
|
| - NGLineBoxFragmentBuilder* line_box) {
|
| + const NGInlineItemResult& item_result,
|
| + NGLineBoxFragmentBuilder* line_box,
|
| + LayoutUnit position) {
|
| stack_.resize(stack_.size() + 1);
|
| NGInlineBoxState* box = &stack_.back();
|
| box->fragment_start = line_box->Children().size();
|
| box->item = &item;
|
| box->style = item.Style();
|
| +
|
| + // Compute box properties regardless of needs_box_fragment since close tag may
|
| + // also set needs_box_fragment.
|
| + box->line_left_position = position + item_result.margins.inline_start;
|
| + box->borders_paddings_block_start = item_result.borders_paddings_block_start;
|
| + box->borders_paddings_block_end = item_result.borders_paddings_block_end;
|
| return box;
|
| }
|
|
|
| @@ -126,20 +137,17 @@ void NGInlineLayoutStateStack::EndBoxState(NGInlineBoxState* box,
|
| }
|
| }
|
|
|
| -void NGInlineBoxState::SetNeedsBoxFragment(
|
| - const NGInlineItem& item,
|
| - const NGInlineItemResult& item_result,
|
| - LayoutUnit position) {
|
| - needs_box_fragment = true;
|
| - line_left_position = position + item_result.margins.inline_start;
|
| - borders_paddings_block_start = item_result.borders_paddings_block_start;
|
| - borders_paddings_block_end = item_result.borders_paddings_block_end;
|
| - // We have left edge on open tag, and if the box is not a continuation.
|
| - // TODO(kojii): Needs review when we change SplitInlines().
|
| - bool has_line_left_edge = item.Style()->IsLeftToRightDirection()
|
| - ? item.HasStartEdge()
|
| - : item.HasEndEdge();
|
| - border_edges = {true, false, true, has_line_left_edge};
|
| +void NGInlineBoxState::SetNeedsBoxFragment(bool when_empty) {
|
| + needs_box_fragment_when_empty = when_empty;
|
| + if (!needs_box_fragment) {
|
| + needs_box_fragment = true;
|
| + // We have left edge on open tag, and if the box is not a continuation.
|
| + // TODO(kojii): Needs review when we change SplitInlines().
|
| + bool has_line_left_edge = item->Style()->IsLeftToRightDirection()
|
| + ? item->HasStartEdge()
|
| + : item->HasEndEdge();
|
| + border_edges = {true, false, true, has_line_left_edge};
|
| + }
|
| }
|
|
|
| void NGInlineBoxState::SetLineRightForBoxFragment(
|
| @@ -164,8 +172,10 @@ void NGInlineLayoutStateStack::AddBoxFragmentPlaceholder(
|
| NGInlineBoxState* box,
|
| NGLineBoxFragmentBuilder* line_box,
|
| FontBaseline baseline_type) {
|
| + DCHECK(box->needs_box_fragment);
|
| LayoutUnit inline_size = box->line_right_position - box->line_left_position;
|
| - if (box->fragment_start == line_box->Children().size() && inline_size <= 0) {
|
| + if (box->fragment_start == line_box->Children().size() &&
|
| + !box->needs_box_fragment_when_empty) {
|
| // Don't create a box if the inline box is "empty".
|
| // Inline boxes with inline margins/borders/paddings are not "empty",
|
| // but background doesn't make difference in this context.
|
|
|