diff --git a/components/layout/table_row.rs b/components/layout/table_row.rs
index 45ac5fbdb3f..d4dddb1a403 100644
--- a/components/layout/table_row.rs
+++ b/components/layout/table_row.rs
@@ -752,6 +752,7 @@ pub fn propagate_column_inline_sizes_to_child(
// FIXME(pcwalton): This seems inefficient. Reference count it instead?
match child_flow.class() {
FlowClass::TableRowGroup => {
+ incoming_rowspan.clear();
let child_table_rowgroup_flow = child_flow.as_mut_table_rowgroup();
child_table_rowgroup_flow.spacing = *border_spacing;
for kid in child_table_rowgroup_flow.block_flow.base.child_iter_mut() {
@@ -789,7 +790,11 @@ pub fn propagate_column_inline_sizes_to_child(
if incoming_rowspan.len() < col + 1 {
incoming_rowspan.resize(col + 1, 1);
}
- incoming_rowspan[col] = max(cell.row_span, incoming_rowspan[col]);
+ // HTML ยง 4.9.11: For rowspan, the value 0 means the cell is to span all
+ // the remaining rows in the rowgroup.
+ if cell.row_span > incoming_rowspan[col] || cell.row_span == 0 {
+ incoming_rowspan[col] = cell.row_span;
+ }
}
col += 1;
}
diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json
index e5f7738ba93..36abb2d5adb 100644
--- a/tests/wpt/mozilla/meta/MANIFEST.json
+++ b/tests/wpt/mozilla/meta/MANIFEST.json
@@ -5292,6 +5292,18 @@
"url": "/_mozilla/css/table_row_direction_a.html"
}
],
+ "css/table_rowspan_rowgroup_a.html": [
+ {
+ "path": "css/table_rowspan_rowgroup_a.html",
+ "references": [
+ [
+ "/_mozilla/css/table_rowspan_rowgroup_ref.html",
+ "=="
+ ]
+ ],
+ "url": "/_mozilla/css/table_rowspan_rowgroup_a.html"
+ }
+ ],
"css/table_rowspan_simple_a.html": [
{
"path": "css/table_rowspan_simple_a.html",
@@ -20550,6 +20562,18 @@
"url": "/_mozilla/css/table_row_direction_a.html"
}
],
+ "css/table_rowspan_rowgroup_a.html": [
+ {
+ "path": "css/table_rowspan_rowgroup_a.html",
+ "references": [
+ [
+ "/_mozilla/css/table_rowspan_rowgroup_ref.html",
+ "=="
+ ]
+ ],
+ "url": "/_mozilla/css/table_rowspan_rowgroup_a.html"
+ }
+ ],
"css/table_rowspan_simple_a.html": [
{
"path": "css/table_rowspan_simple_a.html",
@@ -20562,18 +20586,6 @@
"url": "/_mozilla/css/table_rowspan_simple_a.html"
}
],
- "css/table_rowspan_simple_ref.html": [
- {
- "path": "css/table_rowspan_simple_ref.html",
- "references": [
- [
- "/_mozilla/css/table_rowspan_simple_ref.html",
- "=="
- ]
- ],
- "url": "/_mozilla/css/table_rowspan_simple_ref.html"
- }
- ],
"css/table_specified_width_a.html": [
{
"path": "css/table_specified_width_a.html",
diff --git a/tests/wpt/mozilla/tests/css/table_rowspan_rowgroup_a.html b/tests/wpt/mozilla/tests/css/table_rowspan_rowgroup_a.html
new file mode 100644
index 00000000000..94f091ccf13
--- /dev/null
+++ b/tests/wpt/mozilla/tests/css/table_rowspan_rowgroup_a.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+ A | B |
+ C |
+ D |
+
+
+ E | F |
+
+
+
+
+
diff --git a/tests/wpt/mozilla/tests/css/table_rowspan_rowgroup_ref.html b/tests/wpt/mozilla/tests/css/table_rowspan_rowgroup_ref.html
new file mode 100644
index 00000000000..0e4b668510a
--- /dev/null
+++ b/tests/wpt/mozilla/tests/css/table_rowspan_rowgroup_ref.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+ A | B |
+ C |
+ D |
+
+
+ E | F |
+
+
+
+
+
diff --git a/tests/wpt/mozilla/tests/css/table_rowspan_simple_ref.html b/tests/wpt/mozilla/tests/css/table_rowspan_simple_ref.html
index 83580dd1d39..a9878865cd2 100644
--- a/tests/wpt/mozilla/tests/css/table_rowspan_simple_ref.html
+++ b/tests/wpt/mozilla/tests/css/table_rowspan_simple_ref.html
@@ -1,7 +1,6 @@
-