Commit 49b2b8a8 authored by atotic's avatar atotic Committed by Commit bot

Fixes calculation of abspos style properties:

left/padding/width/height...
Replaced NGSizeIndefinite with Optional<LayoutUnit>

Fixed a couple of minor bugs where AvailableSize was incorrect.

Passing ~30 more tests.

BUG=635619

Review-Url: https://codereview.chromium.org/2616613003
Cr-Commit-Position: refs/heads/master@{#441881}
parent 777a4089
......@@ -182,22 +182,17 @@ crbug.com/674468 [ Trusty ] compositing/reflections/nested-reflection-transition
# LayoutNG - is a new layout system for Blink.
#### css2.1/20110323
#### Passed: 175
#### Skipped: 234
#### Passed: 202
#### Skipped: 207
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-height-001.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-height-002.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-height-003.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-height-004.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-height-005.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-height-006.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-height-007.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-height-008.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-height-009.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-height-010.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-height-011.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-height-012.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-max-height-001.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-max-height-002.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-max-height-003.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-max-height-004.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-max-height-005.htm [ Skip ]
......@@ -207,22 +202,10 @@ crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-max-hei
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-max-height-010.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-max-height-011.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-max-height-012.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-001.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-002.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-003.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-004.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-005.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-006.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-007.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-008.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-009.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-010.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-011.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-012.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-013.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-014.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-015.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-016.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-017.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-018.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-non-replaced-width-019.htm [ Skip ]
......@@ -237,9 +220,6 @@ crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-003.
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-004.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-005.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-007.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-008.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-009.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-010.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-011.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-012.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-014.htm [ Skip ]
......@@ -248,13 +228,11 @@ crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-017.
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-018.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-019.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-021.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-022.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-023.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-024.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-025.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-026.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-028.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-029.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-030.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-031.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-height-032.htm [ Skip ]
......@@ -284,19 +262,11 @@ crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-width-069.h
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-width-071.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/absolute-replaced-width-076.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-containing-block-initial-001.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-containing-block-initial-004a.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-containing-block-initial-004b.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-containing-block-initial-004c.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-containing-block-initial-004d.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-containing-block-initial-004e.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-containing-block-initial-004f.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-containing-block-initial-005b.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-containing-block-initial-005d.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-containing-block-initial-007.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-containing-block-initial-009a.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-containing-block-initial-009b.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-containing-block-initial-009e.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-containing-block-initial-009f.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-non-replaced-width-margin-000.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/abspos-replaced-width-margin-000.htm [ Skip ]
crbug.com/635619 virtual/layout_ng/css2.1/20110323/background-intrinsic-001.htm [ Skip ]
......
......@@ -50,7 +50,7 @@ ComputePartialAbsoluteWithChildInlineSize(
const NGConstraintSpace& space,
const ComputedStyle& style,
const NGStaticPosition&,
const Optional<LayoutUnit>& child_inline_size);
const Optional<MinAndMaxContentSizes>& child_minmax);
// Compute rest of NGPhysicalRect that depends on child's block_size.
CORE_EXPORT void ComputeFullAbsoluteWithChildBlockSize(
......
......@@ -111,7 +111,8 @@ TEST_F(NGAbsoluteUtilsTest, Horizontal) {
LayoutUnit width =
container_size_.inline_size - left - margin_left - right - margin_right;
Optional<LayoutUnit> estimated_inline;
Optional<MinAndMaxContentSizes> estimated_inline;
MinAndMaxContentSizes minmax_60{LayoutUnit(60), LayoutUnit(60)};
style_->setBorderLeftWidth(border_left.toInt());
style_->setBorderRightWidth(border_right.toInt());
......@@ -135,26 +136,26 @@ TEST_F(NGAbsoluteUtilsTest, Horizontal) {
// All auto => width is estimated_inline, left is 0.
SetHorizontalStyle(NGAuto, NGAuto, NGAuto, NGAuto, NGAuto);
EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), true);
estimated_inline = LayoutUnit(60);
estimated_inline = minmax_60;
p = ComputePartialAbsoluteWithChildInlineSize(
*ltr_space_, *style_, static_position, estimated_inline);
EXPECT_EQ(*estimated_inline, p.size.width);
EXPECT_EQ(minmax_60.min_content, p.size.width);
EXPECT_EQ(LayoutUnit(0), p.inset.left);
// All auto => width is estimated_inline, static_position is right
SetHorizontalStyle(NGAuto, NGAuto, NGAuto, NGAuto, NGAuto);
EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), true);
estimated_inline = LayoutUnit(60);
estimated_inline = minmax_60;
p = ComputePartialAbsoluteWithChildInlineSize(
*ltr_space_, *style_, static_right_position, estimated_inline);
EXPECT_EQ(*estimated_inline, p.size.width);
EXPECT_EQ(minmax_60.min_content, p.size.width);
EXPECT_EQ(LayoutUnit(0), p.inset.right);
// All auto + RTL.
p = ComputePartialAbsoluteWithChildInlineSize(
*rtl_space_, *style_, static_position, estimated_inline);
EXPECT_EQ(*estimated_inline, p.size.width);
EXPECT_EQ(container_size_.inline_size - *estimated_inline, p.inset.right);
EXPECT_EQ(minmax_60.min_content, p.size.width);
EXPECT_EQ(container_size_.inline_size - minmax_60.min_content, p.inset.right);
// left, right, and left are known, compute margins.
SetHorizontalStyle(left, NGAuto, width, NGAuto, right);
......@@ -204,10 +205,10 @@ TEST_F(NGAbsoluteUtilsTest, Horizontal) {
// Rule 1 left and width are auto.
SetHorizontalStyle(NGAuto, margin_left, NGAuto, margin_right, right);
EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), true);
estimated_inline = LayoutUnit(60);
estimated_inline = minmax_60;
p = ComputePartialAbsoluteWithChildInlineSize(
*ltr_space_, *style_, static_position, estimated_inline);
EXPECT_EQ(*estimated_inline, p.size.width);
EXPECT_EQ(minmax_60.min_content, p.size.width);
// Rule 2 left and right are auto LTR.
SetHorizontalStyle(NGAuto, margin_left, width, margin_right, NGAuto);
......@@ -230,13 +231,13 @@ TEST_F(NGAbsoluteUtilsTest, Horizontal) {
// Rule 3 width and right are auto.
SetHorizontalStyle(left, margin_left, NGAuto, margin_right, NGAuto);
EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), true);
estimated_inline = LayoutUnit(60);
estimated_inline = minmax_60;
p = ComputePartialAbsoluteWithChildInlineSize(
*ltr_space_, *style_, static_position, estimated_inline);
EXPECT_EQ(
container_size_.inline_size - *estimated_inline - left - margin_left,
container_size_.inline_size - minmax_60.min_content - left - margin_left,
p.inset.right);
EXPECT_EQ(*estimated_inline, p.size.width);
EXPECT_EQ(minmax_60.min_content, p.size.width);
// Rule 4: left is auto.
SetHorizontalStyle(NGAuto, margin_left, width, margin_right, right);
......
......@@ -8,6 +8,7 @@
#include "core/layout/ng/ng_block_node.h"
#include "core/layout/ng/ng_constraint_space_builder.h"
#include "core/layout/ng/ng_length_utils.h"
#include "core/layout/ng/ng_physical_fragment.h"
#include "core/style/ComputedStyle.h"
#include "core/layout/ng/ng_fragment.h"
......@@ -34,6 +35,7 @@ NGOutOfFlowLayoutPart::NGOutOfFlowLayoutPart(
NGConstraintSpaceBuilder space_builder(
FromPlatformWritingMode(container_style->getWritingMode()));
space_builder.SetAvailableSize(space_size);
space_builder.SetPercentageResolutionSize(space_size);
space_builder.SetIsNewFormattingContext(true);
space_builder.SetTextDirection(container_style->direction());
parent_space_ = space_builder.ToConstraintSpace();
......@@ -107,8 +109,7 @@ bool NGOutOfFlowLayoutPart::ComputeInlineSizeEstimate() {
if (AbsoluteNeedsChildInlineSize(*node_->Style())) {
MinAndMaxContentSizes size;
if (node_->ComputeMinAndMaxContentSizes(&size)) {
inline_estimate_ =
size.ShrinkToFit(parent_space_->AvailableSize().inline_size);
inline_estimate_ = size;
return true;
}
return false;
......@@ -145,7 +146,7 @@ bool NGOutOfFlowLayoutPart::ComputeNodeFragment() {
if (block_estimate_)
available_size.block_size = *block_estimate_;
builder.SetAvailableSize(available_size);
builder.SetPercentageResolutionSize(available_size);
builder.SetPercentageResolutionSize(parent_space_->AvailableSize());
if (block_estimate_)
builder.SetIsFixedSizeBlock(true);
builder.SetIsFixedSizeInline(true);
......
......@@ -63,7 +63,7 @@ class CORE_EXPORT NGOutOfFlowLayoutPart
Member<NGConstraintSpace> node_space_;
Member<NGFragment> node_fragment_;
NGAbsolutePhysicalPosition node_position_;
Optional<LayoutUnit> inline_estimate_;
Optional<MinAndMaxContentSizes> inline_estimate_;
Optional<LayoutUnit> block_estimate_;
};
......
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