Bug 478834 - Record that we need to look for clearance if we encounter a block that might need to be pushed down for intersecting floats (i.e., one that establishes a BFC). r=roc

Without this change, nsBlockFrame::ReflowBlockFrame will fail to have
mayNeedRetry true, which means that it won't set
blockHTMLRS.mDiscoveredClearance, which means that on a descendant
replaced block we will fail to fall into any of the cases that call
ClearFloats.  This change will cause us to hit the first ClearFloats
call and discover the need for clearance.

I tested locally that the new reftest fails without the patch and passes
with the patch.
This commit is contained in:
L. David Baron 2015-07-27 20:23:56 -07:00
parent 31bb55fc9b
commit 95eb91e53c
4 changed files with 55 additions and 1 deletions

View File

@ -164,7 +164,8 @@ nsBlockReflowContext::ComputeCollapsedBStartMargin(const nsHTMLReflowState& aRS,
availSpace);
// Record that we're being optimistic by assuming the kid
// has no clearance
if (kid->StyleDisplay()->mBreakType != NS_STYLE_CLEAR_NONE) {
if (kid->StyleDisplay()->mBreakType != NS_STYLE_CLEAR_NONE ||
!nsBlockFrame::BlockCanIntersectFloats(kid)) {
*aMayNeedRetry = true;
}
if (ComputeCollapsedBStartMargin(innerReflowState, aMargin,

View File

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html>
<head>
<title>Bug 478834 Testcase</title>
<style>
html { overflow: hidden }
</style>
</head>
<body>
<div style="background:teal; width: 500px">
<div style="background:yellow; width: 100px; height: 50px;"></div>
<div style="margin-right: 150px">
<table width="100%" style="background: fuchsia">
<tr><td>
x x x x x x x x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x x x x x x x x
</td></tr>
</table>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html>
<head>
<title>Bug 478834 Testcase</title>
<style>
html { overflow: hidden }
</style>
</head>
<body>
<div style="background:teal; width: 500px">
<div style="background:yellow; float:left; width: 100px; height: 50px;"></div>
<div style="margin-right: 150px">
<table width="100%" style="background: fuchsia">
<tr><td>
x x x x x x x x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x x x x x x x x
</td></tr>
</table>
</div>
</div>
</body>
</html>

View File

@ -16,6 +16,7 @@ fails == 345369-2.html 345369-2-ref.html
== 345369-4.html 345369-4-ref.html
== 345369-5.html 345369-5-ref.html
== 429974-1.html 429974-1-ref.html
== 478834-1.html 478834-1-ref.html
== 546048-1.html 546048-1-ref.html
== 775350-1.html 775350-1-ref.html
== 1114329.html 1114329-ref.html