Commit 4696d7ea authored by Robert Hogan's avatar Robert Hogan Committed by Commit Bot

Ensure nested tables without repeating headers avoid repeated headers

Bug: 759195
Change-Id: I06e0d3e61badeab247e0fa9d6e3677113f7c461a
Reviewed-on: https://chromium-review.googlesource.com/671366Reviewed-by: default avatarMorten Stenshorne <mstensho@opera.com>
Commit-Queue: Robert Hogan <robhogan@gmail.com>
Cr-Commit-Position: refs/heads/master@{#502923}
parent b55b9a83
<!DOCTYPE html>
<style>
.header {
line-height: 80px;
}
tr {
break-inside: avoid;
}
</style>
<p>crbug.com/759195: Carry header offset through to nested tables even when they don't have a header.</p>
<div style="columns:3; height:400px; column-fill: auto; column-width: 100px;background-color: yellow;">
<table cellpadding=0 cellspacing=0>
<tr>
<td>
<div class="header">
HEADER
</div>
</td>
</tr>
<tr>
<td>
<table cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<div class="header">
HEADER
</div>
</td>
</tr>
<tr>
<td>
<table cellpadding="0" cellspacing="0">
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<!DOCTYPE html>
<style>
.header {
line-height: 80px;
}
thead, tr, tfoot {
break-inside: avoid;
}
</style>
<p>crbug.com/759195: Carry header offset through to nested tables even when they don't have a header.</p>
<div style="columns:3; height:400px; column-fill: auto; column-width: 100px;background-color: yellow;">
<table cellpadding=0 cellspacing=0>
<thead>
<tr>
<td>
<div class="header">
HEADER
</div>
</td>
</tr>
</thead>
<tbody>
<tr>
<td>
<table cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<!DOCTYPE html>
<style>
.header {
line-height: 80px;
}
tr {
break-inside: avoid;
}
</style>
<p>crbug.com/759195: Carry footer offset through to nested tables even when they don't have a footer.</p>
<div style="columns:3; height:400px; column-fill: auto; column-width: 100px;background-color: yellow;">
<table cellpadding=0 cellspacing=0>
<tr>
<td>
<div class="header">
HEADER
</div>
</td>
</tr>
<tr>
<td>
<table cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<div class="header">
FOOTER
</div>
</td>
</tr>
<tr>
<td>
<div class="header">
HEADER
</div>
</td>
</tr>
<tr>
<td>
<table cellpadding="0" cellspacing="0">
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<div class="header">
FOOTER
</div>
</td>
</tr>
</table>
</div>
<!DOCTYPE html>
<style>
.header {
line-height: 80px;
}
thead, tr, tfoot {
break-inside: avoid;
}
</style>
<p>crbug.com/759195: Carry footer offset through to nested tables even when they don't have a footer.</p>
<div style="columns:3; height:400px; column-fill: auto; column-width: 100px;background-color: yellow;">
<table cellpadding=0 cellspacing=0>
<thead>
<tr>
<td>
<div class="header">
HEADER
</div>
</td>
</tr>
</thead>
<tbody>
<tr>
<td>
<table cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td style="height:20px">0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tfoot>
<tr>
<td>
<div class="header">
FOOTER
</div>
</td>
</tr>
</tfoot>
</tbody>
</table>
</div>
...@@ -675,13 +675,14 @@ void LayoutTable::UpdateLayout() { ...@@ -675,13 +675,14 @@ void LayoutTable::UpdateLayout() {
LayoutUnit original_offset_for_table_headers = LayoutUnit original_offset_for_table_headers =
state.HeightOffsetForTableHeaders(); state.HeightOffsetForTableHeaders();
LayoutUnit offset_for_table_headers = original_offset_for_table_headers;
LayoutUnit original_offset_for_table_footers = LayoutUnit original_offset_for_table_footers =
state.HeightOffsetForTableFooters(); state.HeightOffsetForTableFooters();
LayoutUnit offset_for_table_footers = original_offset_for_table_footers;
if (state.IsPaginated() && IsPageLogicalHeightKnown()) { if (state.IsPaginated() && IsPageLogicalHeightKnown()) {
// If the repeating header group allows at least one row of content, // If the repeating header group allows at least one row of content,
// then store the offset for other sections to offset their rows // then store the offset for other sections to offset their rows
// against. // against.
LayoutUnit offset_for_table_headers = original_offset_for_table_headers;
if (header && header->IsRepeatingHeaderGroup()) { if (header && header->IsRepeatingHeaderGroup()) {
offset_for_table_headers += header->LogicalHeight(); offset_for_table_headers += header->LogicalHeight();
// Don't include any strut in the header group - we only want the // Don't include any strut in the header group - we only want the
...@@ -690,15 +691,14 @@ void LayoutTable::UpdateLayout() { ...@@ -690,15 +691,14 @@ void LayoutTable::UpdateLayout() {
offset_for_table_headers -= row->PaginationStrut(); offset_for_table_headers -= row->PaginationStrut();
SetRowOffsetFromRepeatingHeader(offset_for_table_headers); SetRowOffsetFromRepeatingHeader(offset_for_table_headers);
} }
state.SetHeightOffsetForTableHeaders(offset_for_table_headers);
LayoutUnit offset_for_table_footers = original_offset_for_table_footers;
if (footer && footer->IsRepeatingFooterGroup()) { if (footer && footer->IsRepeatingFooterGroup()) {
offset_for_table_footers += footer->LogicalHeight(); offset_for_table_footers += footer->LogicalHeight();
SetRowOffsetFromRepeatingFooter(offset_for_table_footers); SetRowOffsetFromRepeatingFooter(offset_for_table_footers);
} }
state.SetHeightOffsetForTableFooters(offset_for_table_footers);
} }
state.SetHeightOffsetForTableHeaders(offset_for_table_headers);
state.SetHeightOffsetForTableFooters(offset_for_table_footers);
// Lay out table body groups, and column groups. // Lay out table body groups, and column groups.
for (LayoutObject* child = FirstChild(); child; for (LayoutObject* child = FirstChild(); child;
......
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