Commit dc843fac authored by ikilpatrick's avatar ikilpatrick Committed by Commit bot

[LayoutNG] Change anonymous LayoutBlockFlow to LayoutNGBlockFlow

Additionally this resolves an incoming margin strut once we know the inline node
isn't empty. In this respect we treat it like a zero-height div.

This regresses some tests that were using the existing LayoutBlockFlow layout.
I.e. when we are inside a LayoutTableCell.

BUG=635619

Review-Url: https://codereview.chromium.org/2851983002
Cr-Commit-Position: refs/heads/master@{#468470}
parent 9815502d
...@@ -416,11 +416,12 @@ crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/margin-col ...@@ -416,11 +416,12 @@ crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/margin-col
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/margin-collapse-clear-015.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/margin-collapse-clear-015.xht [ Skip ]
### external/wpt/css/CSS2/floats ### external/wpt/css/CSS2/floats
#### Passed: 19 48% #### Passed: 18 43%
#### Skipped: 23 #### Skipped: 24
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-001a.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-001a.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-001b.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-001b.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-001c.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-001c.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-003.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-001-left-overflow.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-001-left-overflow.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-001-right-overflow.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-001-right-overflow.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-002-left-overflow.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-002-left-overflow.xht [ Skip ]
...@@ -699,8 +700,8 @@ crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containin ...@@ -699,8 +700,8 @@ crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containin
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-009a.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-009a.xht [ Skip ]
#### external/wpt/css/CSS2/normal-flow #### external/wpt/css/CSS2/normal-flow
#### Passed: 492 70% #### Passed: 495 70%
#### Skipped: 216 #### Skipped: 213
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-formatting-context-height-001.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-formatting-context-height-001.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-formatting-context-height-002.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-formatting-context-height-002.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-formatting-contexts-008.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-formatting-contexts-008.xht [ Skip ]
...@@ -711,10 +712,6 @@ crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-forma ...@@ -711,10 +712,6 @@ crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-forma
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-formatting-contexts-015.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-formatting-contexts-015.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-insert-001f.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-insert-001f.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-insert-002f.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-insert-002f.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-margins-001a.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-margins-001b.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-margins-002a.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-margins-002b.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-percents-001.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-percents-001.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-non-replaced-height-001.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-non-replaced-height-001.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-non-replaced-height-005.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-non-replaced-height-005.xht [ Skip ]
...@@ -914,6 +911,7 @@ crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-width-p ...@@ -914,6 +911,7 @@ crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/min-width-p
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/replaced-intrinsic-001.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/replaced-intrinsic-001.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/replaced-intrinsic-002.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/replaced-intrinsic-002.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/root-box-001.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/root-box-001.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/table-in-inline-001.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/width-applies-to-012.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/width-applies-to-012.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/width-inherit-001.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/width-inherit-001.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/width-percentage-001.xht [ Skip ] crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/width-percentage-001.xht [ Skip ]
...@@ -951,8 +949,8 @@ crbug.com/635619 virtual/layout_ng/fast/block/basic/min-pref-width-nowrap-floats ...@@ -951,8 +949,8 @@ crbug.com/635619 virtual/layout_ng/fast/block/basic/min-pref-width-nowrap-floats
crbug.com/635619 virtual/layout_ng/fast/block/basic/percent-height-inside-anonymous-block.html [ Failure Crash ] crbug.com/635619 virtual/layout_ng/fast/block/basic/percent-height-inside-anonymous-block.html [ Failure Crash ]
#### fast/block/margin-collapse #### fast/block/margin-collapse
#### Passed: 31 #### Passed: 33
#### Skipped: 59 #### Skipped: 57
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/004.html [ Skip ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/004.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/006.html [ Skip ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/006.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/016.html [ Skip ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/016.html [ Skip ]
...@@ -984,14 +982,12 @@ crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/102.html [ Skip ] ...@@ -984,14 +982,12 @@ crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/102.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/103.html [ Skip ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/103.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/104.html [ Skip ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/104.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/bfc-beside-float-complex-margin-collapsing.html [ Skip ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/bfc-beside-float-complex-margin-collapsing.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/001.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/002.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/003.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/004.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/005.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/006.html [ Skip ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/006.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/010.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/011.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/012.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/015.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/016.html [ Skip ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/016.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/018.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/021.html [ Skip ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/021.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/022.html [ Skip ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/022.html [ Skip ]
crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/025.html [ Skip ] crbug.com/635619 virtual/layout_ng/fast/block/margin-collapse/block-inside-inline/025.html [ Skip ]
......
...@@ -49,6 +49,7 @@ ...@@ -49,6 +49,7 @@
#include "core/layout/line/InlineIterator.h" #include "core/layout/line/InlineIterator.h"
#include "core/layout/line/InlineTextBox.h" #include "core/layout/line/InlineTextBox.h"
#include "core/layout/line/LineWidth.h" #include "core/layout/line/LineWidth.h"
#include "core/layout/ng/layout_ng_block_flow.h"
#include "core/layout/shapes/ShapeOutsideInfo.h" #include "core/layout/shapes/ShapeOutsideInfo.h"
#include "core/paint/BlockFlowPaintInvalidator.h" #include "core/paint/BlockFlowPaintInvalidator.h"
#include "core/paint/PaintLayer.h" #include "core/paint/PaintLayer.h"
...@@ -256,7 +257,9 @@ LayoutBlockFlow::LayoutBlockFlow(ContainerNode* node) : LayoutBlock(node) { ...@@ -256,7 +257,9 @@ LayoutBlockFlow::LayoutBlockFlow(ContainerNode* node) : LayoutBlock(node) {
LayoutBlockFlow::~LayoutBlockFlow() {} LayoutBlockFlow::~LayoutBlockFlow() {}
LayoutBlockFlow* LayoutBlockFlow::CreateAnonymous(Document* document) { LayoutBlockFlow* LayoutBlockFlow::CreateAnonymous(Document* document) {
LayoutBlockFlow* layout_block_flow = new LayoutBlockFlow(nullptr); LayoutBlockFlow* layout_block_flow = RuntimeEnabledFeatures::layoutNGEnabled()
? new LayoutNGBlockFlow(nullptr)
: new LayoutBlockFlow(nullptr);
layout_block_flow->SetDocumentForAnonymous(document); layout_block_flow->SetDocumentForAnonymous(document);
return layout_block_flow; return layout_block_flow;
} }
......
...@@ -76,10 +76,6 @@ NGInlineLayoutAlgorithm::NGInlineLayoutAlgorithm( ...@@ -76,10 +76,6 @@ NGInlineLayoutAlgorithm::NGInlineLayoutAlgorithm(
Initialize(break_token->ItemIndex(), break_token->TextOffset()); Initialize(break_token->ItemIndex(), break_token->TextOffset());
else else
Initialize(0, 0); Initialize(0, 0);
// BFC offset is known for inline fragments.
MaybeUpdateFragmentBfcOffset(ConstraintSpace(), ConstraintSpace().BfcOffset(),
&container_builder_);
} }
bool NGInlineLayoutAlgorithm::IsFirstLine() const { bool NGInlineLayoutAlgorithm::IsFirstLine() const {
...@@ -250,6 +246,16 @@ bool NGInlineLayoutAlgorithm::CreateLine() { ...@@ -250,6 +246,16 @@ bool NGInlineLayoutAlgorithm::CreateLine() {
bool NGInlineLayoutAlgorithm::CreateLineUpToLastBreakOpportunity() { bool NGInlineLayoutAlgorithm::CreateLineUpToLastBreakOpportunity() {
const Vector<NGInlineItem>& items = Node()->Items(); 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_);
}
// Create a list of LineItemChunk from |start| and |last_break_opportunity|. // Create a list of LineItemChunk from |start| and |last_break_opportunity|.
// TODO(kojii): Consider refactoring LineItemChunk once NGLineBuilder's public // TODO(kojii): Consider refactoring LineItemChunk once NGLineBuilder's public
// API is more finalized. It does not fit well with the current API. // API is more finalized. It does not fit well with the current API.
...@@ -571,6 +577,13 @@ RefPtr<NGLayoutResult> NGInlineLayoutAlgorithm::Layout() { ...@@ -571,6 +577,13 @@ RefPtr<NGLayoutResult> NGInlineLayoutAlgorithm::Layout() {
NGLogicalSize size(max_inline_size_, content_size_); NGLogicalSize size(max_inline_size_, content_size_);
container_builder_.SetSize(size).SetOverflowSize(size); container_builder_.SetSize(size).SetOverflowSize(size);
// TODO(crbug.com/716930): We may be an empty LayoutInline due to splitting.
// Margin struts shouldn't need to be passed through like this once we've
// removed LayoutInline splitting.
if (!container_builder_.BfcOffset()) {
container_builder_.SetEndMarginStrut(ConstraintSpace().MarginStrut());
}
return container_builder_.ToBoxFragment(); return container_builder_.ToBoxFragment();
} }
......
...@@ -347,8 +347,11 @@ NGLogicalOffset NGBlockLayoutAlgorithm::PrepareChildLayout( ...@@ -347,8 +347,11 @@ NGLogicalOffset NGBlockLayoutAlgorithm::PrepareChildLayout(
bool is_legacy_block = bool is_legacy_block =
child->IsBlock() && !ToNGBlockNode(child)->CanUseNewLayout(); child->IsBlock() && !ToNGBlockNode(child)->CanUseNewLayout();
// Should collapse margins if inline or legacy block // TODO(crbug.com/716930): We should also collapse margins below once we
if (child->IsInline() || is_legacy_block) { // remove LayoutInline splitting.
// Should collapse margins if our child is a legacy block.
if (is_legacy_block) {
curr_bfc_offset_.block_offset += curr_margin_strut_.Sum(); curr_bfc_offset_.block_offset += curr_margin_strut_.Sum();
MaybeUpdateFragmentBfcOffset(ConstraintSpace(), curr_bfc_offset_, MaybeUpdateFragmentBfcOffset(ConstraintSpace(), curr_bfc_offset_,
&container_builder_); &container_builder_);
...@@ -563,6 +566,12 @@ RefPtr<NGConstraintSpace> NGBlockLayoutAlgorithm::CreateConstraintSpaceForChild( ...@@ -563,6 +566,12 @@ RefPtr<NGConstraintSpace> NGBlockLayoutAlgorithm::CreateConstraintSpaceForChild(
space_builder_.SetIsNewFormattingContext(is_new_bfc) space_builder_.SetIsNewFormattingContext(is_new_bfc)
.SetBfcOffset(child_bfc_offset); .SetBfcOffset(child_bfc_offset);
// Float's margins are not included in child's space because:
// 1) Floats do not participate in margins collapsing.
// 2) Floats margins are used separately to calculate floating exclusions.
space_builder_.SetMarginStrut(child->IsFloating() ? NGMarginStrut()
: curr_margin_strut_);
if (child->IsInline()) { if (child->IsInline()) {
// TODO(kojii): Setup space_builder_ appropriately for inline child. // TODO(kojii): Setup space_builder_ appropriately for inline child.
space_builder_.SetClearanceOffset(ConstraintSpace().ClearanceOffset()); space_builder_.SetClearanceOffset(ConstraintSpace().ClearanceOffset());
...@@ -576,12 +585,6 @@ RefPtr<NGConstraintSpace> NGBlockLayoutAlgorithm::CreateConstraintSpaceForChild( ...@@ -576,12 +585,6 @@ RefPtr<NGConstraintSpace> NGBlockLayoutAlgorithm::CreateConstraintSpaceForChild(
.SetIsShrinkToFit(ShouldShrinkToFit(Style(), child_style)) .SetIsShrinkToFit(ShouldShrinkToFit(Style(), child_style))
.SetTextDirection(child_style.Direction()); .SetTextDirection(child_style.Direction());
// Float's margins are not included in child's space because:
// 1) Floats do not participate in margins collapsing.
// 2) Floats margins are used separately to calculate floating exclusions.
space_builder_.SetMarginStrut(child->IsFloating() ? NGMarginStrut()
: curr_margin_strut_);
LayoutUnit space_available; LayoutUnit space_available;
if (constraint_space_->HasBlockFragmentation()) { if (constraint_space_->HasBlockFragmentation()) {
space_available = ConstraintSpace().FragmentainerSpaceAvailable(); space_available = ConstraintSpace().FragmentainerSpaceAvailable();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment