Handle nested theads correctly when paginated
When paginated, repeat nested theads at the top of each page - replicating the
way they look on the first page bar any spacing between them applied by content.
We don't try to replicate any cell padding in the nested repeating theads, that
would be a lot of work for not much gain.
BUG=620456
Review-Url: https://codereview.chromium.org/2079603002
Cr-Commit-Position: refs/heads/master@{#402943}
diff --git a/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-2-expected.html b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-2-expected.html
new file mode 100644
index 0000000..17923b9f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-2-expected.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<style>
+table {
+ border-collapse: collapse;
+}
+td, th {
+}
+tr {
+ break-inside: avoid;
+}
+.header {
+ font-weight: bold;
+ text-align: center
+}
+</style>
+<p>crbug.com/620456: A nested table header group repeats on each page.</p>
+<div style="-webkit-columns:3; line-height: 20px; column-fill: auto; height:190px;">
+ <table>
+ <tr><td class="header" colspan=2>Col 1</td></tr>
+ <tr><td>
+ <table>
+ <tr><td class="header" colspan=2>Col 1</td></tr>
+ <tr><td>
+ <table>
+ <tr><td class="header">Col 1</td><td class="header">Col 2</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </table>
+ </tr></td>
+ </table>
+ </tr></td>
+ <tr><td class="header" colspan=2>Col 1</td></tr>
+ <tr><td style="padding-top: 0px;">
+ <table>
+ <tr><td class="header" colspan=2>Col 1</td></tr>
+ <tr><td style="padding-top: 0px;">
+ <table>
+ <tr><td class="header">Col 1</td><td class="header">Col 2</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </table>
+ </tr></td>
+ </table>
+ </tr></td>
+ <tr><td class="header" colspan=2>Col 1</td></tr>
+ <tr><td style="padding-top: 0px;">
+ <table>
+ <tr><td class="header" colspan=2>Col 1</td></tr>
+ <tr><td style="padding-top: 0px;">
+ <table>
+ <tr><td class="header">Col 1</td><td class="header">Col 2</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </table>
+ </tr></td>
+ </table>
+ </tr></td>
+ </table>
+</div>
+
diff --git a/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-2.html b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-2.html
new file mode 100644
index 0000000..67e653d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-2.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<style>
+table {
+ border-collapse: collapse;
+}
+thead, tr {
+ break-inside: avoid;
+}
+</style>
+<p>crbug.com/620456: A nested table header group repeats on each page.</p>
+<div style="-webkit-columns:3; line-height: 20px; column-fill: auto; height:190px;">
+ <table id="top">
+ <thead id="very-top-thead">
+ <tr>
+ <th>Col 1</th>
+ </tr>
+ </thead>
+ <tr><td>
+ <table id="top">
+ <thead id="top-thead">
+ <tr>
+ <th>Col 1</th>
+ </tr>
+ </thead>
+ <tr><td>
+ <table id="next">
+ <thead id="next-thead">
+ <tr>
+ <th>Col 1</th>
+ <th>Col 2</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </tbody>
+ </table>
+ </td></tr>
+ </table>
+ </td></tr>
+ </table>
+</div>
+
diff --git a/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-3-expected.html b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-3-expected.html
new file mode 100644
index 0000000..e33e876
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-3-expected.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<style>
+table {
+ border-collapse: collapse;
+}
+td, th {
+}
+tr {
+ break-inside: avoid;
+}
+.header {
+ font-weight: bold;
+ text-align: center
+}
+</style>
+<p>crbug.com/620456: A nested table header group repeats on each page.</p>
+<div style="-webkit-columns:3; line-height: 20px; column-fill: auto; height:190px;">
+ <table>
+ <tr><td class="header" colspan=2>Col 1</td></tr>
+ <tr><td>
+ <table>
+ <tr><td class="header">Col 1</td><td class="header">Col 2</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </table>
+ </tr></td>
+ <tr><td class="header" colspan=2>Col 1</td></tr>
+ <tr><td style="padding-top: 0px;">
+ <table>
+ <tr><td class="header">Col 1</td><td class="header">Col 2</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </table>
+ </tr></td>
+ <tr><td class="header" colspan=2>Col 1</td></tr>
+ <tr><td style="padding-top: 0px;">
+ <table>
+ <tr><td class="header">Col 1</td><td class="header">Col 2</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </table>
+ </tr></td>
+ </table>
+</div>
+
diff --git a/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-3.html b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-3.html
new file mode 100644
index 0000000..7fa7244
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-3.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<style>
+table {
+ border-collapse: collapse;
+}
+td, th {
+}
+thead, tr {
+ break-inside: avoid;
+}
+</style>
+<p>crbug.com/620456: A nested table header group repeats on each page.</p>
+<div style="-webkit-columns:3; line-height: 20px; column-fill: auto; height:190px;">
+ <table id="top">
+ <thead id="top-thead">
+ <tr>
+ <th>Col 1</th>
+ </tr>
+ </thead>
+ <tr><td>
+ <div>
+ <table id="next">
+ <thead id="next-thead">
+ <tr>
+ <th>Col 1</th>
+ <th>Col 2</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </tbody>
+ </table>
+ </div>
+ </td></tr>
+ </table>
+</div>
+
diff --git a/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-4-expected.html b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-4-expected.html
new file mode 100644
index 0000000..9a24a2e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-4-expected.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<style>
+table {
+ border-collapse: collapse;
+}
+td, th {
+}
+tr {
+ break-inside: avoid;
+}
+.header {
+ font-weight: bold;
+ text-align: center
+}
+</style>
+<p>crbug.com/620456: A nested table header group repeats on each page.</p>
+<div style="-webkit-columns:3; line-height: 20px; column-fill: auto; height:190px;">
+ <table>
+ <tr><td class="header" colspan=2>Col 1</td></tr>
+ <tr><td>
+ <br>
+ <table>
+ <tr><td class="header">Col 1</td><td class="header">Col 2</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </table>
+ </tr></td>
+ <tr><td class="header" colspan=2>Col 1</td></tr>
+ <tr><td style="padding-top: 0px;">
+ <table>
+ <tr><td class="header">Col 1</td><td class="header">Col 2</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </table>
+ </tr></td>
+ <tr><td class="header" colspan=2>Col 1</td></tr>
+ <tr><td style="padding-top: 0px;">
+ <table>
+ <tr><td class="header">Col 1</td><td class="header">Col 2</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </table>
+ </tr></td>
+ </table>
+</div>
+
diff --git a/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-4.html b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-4.html
new file mode 100644
index 0000000..2abdbc4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-4.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<style>
+table {
+ border-collapse: collapse;
+}
+td, th {
+}
+thead, tr {
+ break-inside: avoid;
+}
+</style>
+<p>crbug.com/620456: A nested table header group repeats on each page.</p>
+<div style="-webkit-columns:3; line-height: 20px; column-fill: auto; height:190px;">
+ <table id="top">
+ <thead id="top-thead">
+ <tr>
+ <th>Col 1</th>
+ </tr>
+ </thead>
+ <tr><td>
+ <br>
+ <table id="next">
+ <thead id="next-thead">
+ <tr>
+ <th>Col 1</th>
+ <th>Col 2</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </tbody>
+ </table>
+ </td></tr>
+ </table>
+</div>
+
diff --git a/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-expected.html b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-expected.html
new file mode 100644
index 0000000..e33e876
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead-expected.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<style>
+table {
+ border-collapse: collapse;
+}
+td, th {
+}
+tr {
+ break-inside: avoid;
+}
+.header {
+ font-weight: bold;
+ text-align: center
+}
+</style>
+<p>crbug.com/620456: A nested table header group repeats on each page.</p>
+<div style="-webkit-columns:3; line-height: 20px; column-fill: auto; height:190px;">
+ <table>
+ <tr><td class="header" colspan=2>Col 1</td></tr>
+ <tr><td>
+ <table>
+ <tr><td class="header">Col 1</td><td class="header">Col 2</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </table>
+ </tr></td>
+ <tr><td class="header" colspan=2>Col 1</td></tr>
+ <tr><td style="padding-top: 0px;">
+ <table>
+ <tr><td class="header">Col 1</td><td class="header">Col 2</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </table>
+ </tr></td>
+ <tr><td class="header" colspan=2>Col 1</td></tr>
+ <tr><td style="padding-top: 0px;">
+ <table>
+ <tr><td class="header">Col 1</td><td class="header">Col 2</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </table>
+ </tr></td>
+ </table>
+</div>
+
diff --git a/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead.html b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead.html
new file mode 100644
index 0000000..c501b14
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fragmentation/single-line-cells-nested-repeating-thead.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<style>
+table {
+ border-collapse: collapse;
+}
+td, th {
+}
+thead, tr {
+ break-inside: avoid;
+}
+</style>
+<p>crbug.com/620456: A nested table header group repeats on each page.</p>
+<div style="-webkit-columns:3; line-height: 20px; column-fill: auto; height:190px;">
+ <table id="top">
+ <thead id="top-thead">
+ <tr>
+ <th>Col 1</th>
+ </tr>
+ </thead>
+ <tr><td>
+ <table id="next">
+ <thead id="next-thead">
+ <tr>
+ <th>Col 1</th>
+ <th>Col 2</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ <tr><td>Te</td><td>xt</td></tr>
+ </tbody>
+ </table>
+ </td></tr>
+ </table>
+</div>
+