diff --git a/components/layout_2020/table/layout.rs b/components/layout_2020/table/layout.rs index 652f7a3b2f3..ea223ea0cce 100644 --- a/components/layout_2020/table/layout.rs +++ b/components/layout_2020/table/layout.rs @@ -1423,7 +1423,7 @@ impl<'a> TableLayout<'a> { let mut baselines = Baselines::default(); let mut table_fragments = Vec::new(); - if self.table.size.width == 0 || self.table.size.height == 0 { + if self.table.size.width == 0 && self.table.size.height == 0 { return IndependentLayout { fragments: table_fragments, content_block_size: self.final_table_height, @@ -1794,8 +1794,16 @@ impl TableAndTrackDimensions { fn new(table_layout: &TableLayout) -> Self { let border_spacing = table_layout.table.border_spacing(); + // The sizes used for a dimension when that dimension has no table tracks. + let fallback_inline_size = table_layout.assignable_width; + let fallback_block_size = table_layout.final_table_height; + let mut column_dimensions = Vec::new(); - let mut column_offset = border_spacing.inline; + let mut column_offset = if table_layout.table.size.width == 0 { + fallback_inline_size + } else { + border_spacing.inline + }; for column_index in 0..table_layout.table.size.width { let column_size = table_layout.distributed_column_widths[column_index]; column_dimensions.push((column_offset, column_offset + column_size)); @@ -1803,7 +1811,11 @@ impl TableAndTrackDimensions { } let mut row_dimensions = Vec::new(); - let mut row_offset = border_spacing.block; + let mut row_offset = if table_layout.table.size.height == 0 { + fallback_block_size + } else { + border_spacing.block + }; for row_index in 0..table_layout.table.size.height { let row_size = table_layout.row_sizes[row_index]; row_dimensions.push((row_offset, row_offset + row_size)); @@ -1811,12 +1823,14 @@ impl TableAndTrackDimensions { } let table_start_corner = LogicalVec2 { - inline: column_dimensions[0].0, - block: row_dimensions[0].0, + inline: column_dimensions.first().map_or_else(Au::zero, |v| v.0), + block: row_dimensions.first().map_or_else(Au::zero, |v| v.0), }; let table_size = &LogicalVec2 { - inline: column_dimensions[column_dimensions.len() - 1].1, - block: row_dimensions[row_dimensions.len() - 1].1, + inline: column_dimensions + .last() + .map_or(fallback_inline_size, |v| v.1), + block: row_dimensions.last().map_or(fallback_block_size, |v| v.1), } - &table_start_corner; let table_cells_rect = LogicalRect { start_corner: table_start_corner, diff --git a/tests/wpt/meta-legacy-layout/css/css-tables/tentative/table-rows-with-zero-columns.html.ini b/tests/wpt/meta-legacy-layout/css/css-tables/tentative/table-rows-with-zero-columns.html.ini new file mode 100644 index 00000000000..9ee3963940f --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-tables/tentative/table-rows-with-zero-columns.html.ini @@ -0,0 +1,36 @@ +[table-rows-with-zero-columns.html] + [tr 1] + expected: FAIL + + [tr 2] + expected: FAIL + + [tr 3] + expected: FAIL + + [tr 4] + expected: FAIL + + [tr 5] + expected: FAIL + + [tr 6] + expected: FAIL + + [tr 7] + expected: FAIL + + [tr 8] + expected: FAIL + + [tr 9] + expected: FAIL + + [tr 10] + expected: FAIL + + [tr 11] + expected: FAIL + + [tr 12] + expected: FAIL diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json index bc1da1607a9..0654489de5b 100644 --- a/tests/wpt/meta/MANIFEST.json +++ b/tests/wpt/meta/MANIFEST.json @@ -545267,6 +545267,13 @@ {} ] ], + "table-rows-with-zero-columns.html": [ + "da9e0098a7a1e6657887539448c5e1b2c1f14b5b", + [ + null, + {} + ] + ], "table-width-redistribution-fixed-padding.html": [ "097ddacfc3139105f0d80689e0c03ac722a00aeb", [ diff --git a/tests/wpt/meta/css/css-tables/tentative/baseline-table.html.ini b/tests/wpt/meta/css/css-tables/tentative/baseline-table.html.ini index d89695fbaef..2acbad53770 100644 --- a/tests/wpt/meta/css/css-tables/tentative/baseline-table.html.ini +++ b/tests/wpt/meta/css/css-tables/tentative/baseline-table.html.ini @@ -7,6 +7,3 @@ [.container 13] expected: FAIL - - [.container 3] - expected: FAIL diff --git a/tests/wpt/meta/css/css-tables/tentative/table-height-redistribution.html.ini b/tests/wpt/meta/css/css-tables/tentative/table-height-redistribution.html.ini index 99e920f9e6c..54c6daef5c1 100644 --- a/tests/wpt/meta/css/css-tables/tentative/table-height-redistribution.html.ini +++ b/tests/wpt/meta/css/css-tables/tentative/table-height-redistribution.html.ini @@ -2,39 +2,9 @@ [table 5] expected: FAIL - [table 6] - expected: FAIL - - [table 7] - expected: FAIL - - [table 8] - expected: FAIL - - [table 9] - expected: FAIL - - [table 10] - expected: FAIL - [table 11] expected: FAIL - [table 12] - expected: FAIL - - [table 13] - expected: FAIL - - [table 14] - expected: FAIL - - [table 15] - expected: FAIL - - [table 16] - expected: FAIL - [table 17] expected: FAIL @@ -53,9 +23,6 @@ [table 22] expected: FAIL - [table 23] - expected: FAIL - [table 25] expected: FAIL diff --git a/tests/wpt/tests/css/css-tables/tentative/table-rows-with-zero-columns.html b/tests/wpt/tests/css/css-tables/tentative/table-rows-with-zero-columns.html new file mode 100644 index 00000000000..da9e0098a7a --- /dev/null +++ b/tests/wpt/tests/css/css-tables/tentative/table-rows-with-zero-columns.html @@ -0,0 +1,62 @@ + + +CSS Test: size of table rows when the table has no columns + + + + + + + +
+ +
+ + +
+ + + + +
+ + + +
+ + + + +
+ + + +
+ + + + +
+ + + +
+ + + + +
+
+ + + + +