From ad448da7de46f9f21cf7dc60f8c3cb5293f4d491 Mon Sep 17 00:00:00 2001 From: Oriol Brufau Date: Mon, 2 Dec 2024 23:14:54 +0100 Subject: [PATCH] Obey min and max properties when computing main size of column flex (#34450) When laying out a column flex container with an auto preferred main size, we were resolving the used main size to the intrinsic max-content size. However, we weren't clamping this amount between the min and max sizes. Signed-off-by: Oriol Brufau Co-authored-by: Martin Robinson --- components/layout_2020/flexbox/layout.rs | 17 +- .../align-content-vert-001b.html.ini | 150 ------------------ ...ontainer-justify-center.tentative.html.ini | 3 + .../flex-minimum-size-002.html.ini | 4 - ...lexbox-justify-content-vert-001b.xhtml.ini | 2 - .../css-flexbox/justify-content-007.html.ini | 3 - .../multiline-column-max-height.html.ini | 2 - .../percentage-heights-015.html.ini | 2 - 8 files changed, 12 insertions(+), 171 deletions(-) create mode 100644 tests/wpt/meta/css/css-flexbox/fieldset-as-container-justify-center.tentative.html.ini delete mode 100644 tests/wpt/meta/css/css-flexbox/flexbox-justify-content-vert-001b.xhtml.ini delete mode 100644 tests/wpt/meta/css/css-flexbox/justify-content-007.html.ini delete mode 100644 tests/wpt/meta/css/css-flexbox/multiline-column-max-height.html.ini delete mode 100644 tests/wpt/meta/css/css-flexbox/percentage-heights-015.html.ini diff --git a/components/layout_2020/flexbox/layout.rs b/components/layout_2020/flexbox/layout.rs index f3d3da2347a..e40ba219d55 100644 --- a/components/layout_2020/flexbox/layout.rs +++ b/components/layout_2020/flexbox/layout.rs @@ -636,8 +636,8 @@ impl FlexContainer { containing_block: &ContainingBlock, containing_block_for_container: &ContainingBlock, ) -> IndependentLayout { - let (container_min_cross_size, container_max_cross_size, depends_on_block_constraints) = - self.available_cross_space_for_flex_items(containing_block_for_container); + let (container_min_size, container_max_size, depends_on_block_constraints) = + self.available_space_for_flex_items(containing_block_for_container); let depends_on_block_constraints = depends_on_block_constraints || self.config.flex_direction == FlexDirection::Column; @@ -647,8 +647,8 @@ impl FlexContainer { layout_context, positioning_context, containing_block, - container_min_cross_size, - container_max_cross_size, + container_min_cross_size: container_min_size.cross, + container_max_cross_size: container_max_size.cross, // https://drafts.csswg.org/css-flexbox/#definite-sizes container_definite_inner_size: self.config.flex_axis.vec2_to_flex_relative( LogicalVec2 { @@ -666,6 +666,7 @@ impl FlexContainer { self.main_content_sizes(layout_context, &containing_block.into(), || &flex_context) .sizes .max_content + .clamp_between_extremums(container_min_size.main, container_max_size.main) }), }; @@ -1034,10 +1035,10 @@ impl FlexContainer { Fragment::AbsoluteOrFixedPositioned(hoisted_fragment) } - fn available_cross_space_for_flex_items( + fn available_space_for_flex_items( &self, containing_block_for_container: &ContainingBlock, - ) -> (Au, Option, bool) { + ) -> (FlexRelativeVec2, FlexRelativeVec2>, bool) { let sizes: ContentBoxSizesAndPBMDeprecated = self .style .content_box_sizes_and_padding_border_margin(&containing_block_for_container.into()) @@ -1053,8 +1054,8 @@ impl FlexContainer { .vec2_to_flex_relative(sizes.content_min_box_size.auto_is(Au::zero)); ( - min_box_size.cross, - max_box_size.cross, + min_box_size, + max_box_size, sizes.depends_on_block_constraints, ) } diff --git a/tests/wpt/meta/css/css-flexbox/align-content-vert-001b.html.ini b/tests/wpt/meta/css/css-flexbox/align-content-vert-001b.html.ini index 2521968d5cb..42fc5fef67a 100644 --- a/tests/wpt/meta/css/css-flexbox/align-content-vert-001b.html.ini +++ b/tests/wpt/meta/css/css-flexbox/align-content-vert-001b.html.ini @@ -1,121 +1,4 @@ [align-content-vert-001b.html] - [.flexbox div 42] - expected: FAIL - - [.flexbox div 43] - expected: FAIL - - [.flexbox div 40] - expected: FAIL - - [.flexbox div 46] - expected: FAIL - - [.flexbox div 31] - expected: FAIL - - [.flexbox div 44] - expected: FAIL - - [.flexbox div 45] - expected: FAIL - - [.flexbox div 48] - expected: FAIL - - [.flexbox div 30] - expected: FAIL - - [.flexbox div 66] - expected: FAIL - - [.flexbox div 67] - expected: FAIL - - [.flexbox div 24] - expected: FAIL - - [.flexbox div 26] - expected: FAIL - - [.flexbox div 27] - expected: FAIL - - [.flexbox div 20] - expected: FAIL - - [.flexbox div 21] - expected: FAIL - - [.flexbox div 22] - expected: FAIL - - [.flexbox div 23] - expected: FAIL - - [.flexbox div 28] - expected: FAIL - - [.flexbox div 29] - expected: FAIL - - [.flexbox div 47] - expected: FAIL - - [.flexbox div 55] - expected: FAIL - - [.flexbox div 54] - expected: FAIL - - [.flexbox div 51] - expected: FAIL - - [.flexbox div 50] - expected: FAIL - - [.flexbox div 53] - expected: FAIL - - [.flexbox div 52] - expected: FAIL - - [.flexbox div 72] - expected: FAIL - - [.flexbox div 71] - expected: FAIL - - [.flexbox div 70] - expected: FAIL - - [.flexbox div 56] - expected: FAIL - - [.flexbox div 19] - expected: FAIL - - [.flexbox div 18] - expected: FAIL - - [.flexbox div 69] - expected: FAIL - - [.flexbox div 39] - expected: FAIL - - [.flexbox div 38] - expected: FAIL - - [.flexbox div 68] - expected: FAIL - - [.flexbox div 36] - expected: FAIL - - [.flexbox div 35] - expected: FAIL - [.flexbox div 4] expected: FAIL @@ -130,36 +13,3 @@ [.flexbox div 8] expected: FAIL - - [.flexbox div 32] - expected: FAIL - - [.flexbox div 11] - expected: FAIL - - [.flexbox div 12] - expected: FAIL - - [.flexbox div 14] - expected: FAIL - - [.flexbox div 15] - expected: FAIL - - [.flexbox div 16] - expected: FAIL - - [.flexbox div 59] - expected: FAIL - - [.flexbox div 60] - expected: FAIL - - [.flexbox div 62] - expected: FAIL - - [.flexbox div 63] - expected: FAIL - - [.flexbox div 64] - expected: FAIL diff --git a/tests/wpt/meta/css/css-flexbox/fieldset-as-container-justify-center.tentative.html.ini b/tests/wpt/meta/css/css-flexbox/fieldset-as-container-justify-center.tentative.html.ini new file mode 100644 index 00000000000..3363b8e7b91 --- /dev/null +++ b/tests/wpt/meta/css/css-flexbox/fieldset-as-container-justify-center.tentative.html.ini @@ -0,0 +1,3 @@ +[fieldset-as-container-justify-center.tentative.html] + [.item 1] + expected: FAIL diff --git a/tests/wpt/meta/css/css-flexbox/flex-minimum-size-002.html.ini b/tests/wpt/meta/css/css-flexbox/flex-minimum-size-002.html.ini index b1fad0756d1..d9a42edbb2e 100644 --- a/tests/wpt/meta/css/css-flexbox/flex-minimum-size-002.html.ini +++ b/tests/wpt/meta/css/css-flexbox/flex-minimum-size-002.html.ini @@ -10,7 +10,3 @@ [.flexbox, .inline-flexbox 4] expected: FAIL - - [.flexbox 1] - expected: FAIL - diff --git a/tests/wpt/meta/css/css-flexbox/flexbox-justify-content-vert-001b.xhtml.ini b/tests/wpt/meta/css/css-flexbox/flexbox-justify-content-vert-001b.xhtml.ini deleted file mode 100644 index 807a7a36ae2..00000000000 --- a/tests/wpt/meta/css/css-flexbox/flexbox-justify-content-vert-001b.xhtml.ini +++ /dev/null @@ -1,2 +0,0 @@ -[flexbox-justify-content-vert-001b.xhtml] - expected: FAIL diff --git a/tests/wpt/meta/css/css-flexbox/justify-content-007.html.ini b/tests/wpt/meta/css/css-flexbox/justify-content-007.html.ini deleted file mode 100644 index ea29b95ecec..00000000000 --- a/tests/wpt/meta/css/css-flexbox/justify-content-007.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[justify-content-007.html] - [.flexitem + .flexitem 1] - expected: FAIL diff --git a/tests/wpt/meta/css/css-flexbox/multiline-column-max-height.html.ini b/tests/wpt/meta/css/css-flexbox/multiline-column-max-height.html.ini deleted file mode 100644 index 5f3c503f928..00000000000 --- a/tests/wpt/meta/css/css-flexbox/multiline-column-max-height.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[multiline-column-max-height.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-flexbox/percentage-heights-015.html.ini b/tests/wpt/meta/css/css-flexbox/percentage-heights-015.html.ini deleted file mode 100644 index 3d91d6d3b14..00000000000 --- a/tests/wpt/meta/css/css-flexbox/percentage-heights-015.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[percentage-heights-015.html] - expected: FAIL