fune/testing/web-platform/tests/css/css-break/break-float-dynamic-001.html
Ting-Yu Lin c1ac1fc784 Bug 1559961 Part 2 - Consider a line's scrollable overflow when marking a line dirty. r=dholbert
Before this patch, a block frame considers a line dirty only if the line's
block-end is larger than content area's block-end.

However, scrollable overflow area should be broken in paginated environment
(both in a column container and in printing). We should take this into account
when marking a line dirty.

The dynamic wpt reftests are written with the following conditions in mind to
expose the bug:

1. Initially, all the elements fit into the first column.

2. After shrinking the multicol height, the block itself still fits into
the first column, but its tall child (either a simple tall block or a
tall float), which overflows the smaller multicol height, needs to be
broken.

The flexbox printing reftest are similar. A flex container uses
unconstrained available block-size to measure flex items' block-size,
and then performs a final reflow with constrained available block-size,
which is similar to the dynamic scenario above. One caveat is that flex
items usually have IsBResize() set. So to expose this bug, a float
element needs to be deeply nested under a flex item.

Differential Revision: https://phabricator.services.mozilla.com/D85479
2020-08-07 22:16:21 +00:00

48 lines
1.4 KiB
HTML

<!DOCTYPE html>
<!-- Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ -->
<html>
<meta charset="utf-8">
<title>Test for dynamic re-pagination of a nested float element</title>
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
<link rel="help" href="https://drafts.csswg.org/css-break/#possible-breaks">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1559961">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<style>
#multicol {
columns: 2;
column-fill: auto;
column-gap: 0;
height: 400px; /* Must be large enough so that .target doesn't break initially. */
width: 100px;
background: red;
}
.block {
width: 50px;
background: green;
}
.target {
float: left;
height: 160px; /* Expected to be broken into 2 columns after runTest() */
}
</style>
<script>
function runTest() {
document.body.offsetHeight;
document.getElementById("multicol").style.height = "100px";
}
</script>
<body onload="runTest()">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div id="multicol">
<div>
<div class="block" style="height: 40px"></div>
<div class="block target"></div>
</div>
</div>
</body>
</html>