Bug 841827: Mark flex container frame as having a relative height, if it's abspos w/ auto-height and top,bottom both set. r=dbaron

--HG--
rename : layout/reftests/flexbox/flexbox-dyn-changeFrameWidth-1-iframe.html => layout/reftests/flexbox/flexbox-dyn-changeFrameWidth-4-iframe.html
rename : layout/reftests/flexbox/flexbox-dyn-changeFrameWidth-1-ref.xhtml => layout/reftests/flexbox/flexbox-dyn-changeFrameWidth-4-ref.xhtml
rename : layout/reftests/flexbox/flexbox-dyn-changeFrameWidth-1.xhtml => layout/reftests/flexbox/flexbox-dyn-changeFrameWidth-4.xhtml
This commit is contained in:
Daniel Holbert 2013-03-14 01:18:53 -07:00
parent 1d379aa241
commit 74991fe7c6
5 changed files with 84 additions and 4 deletions

View File

@ -2070,10 +2070,16 @@ nsFlexContainerFrame::Reflow(nsPresContext* aPresContext,
}
// We (and our children) can only depend on our ancestor's height if we have
// a percent-height. (There are actually other cases, too -- e.g. if our
// parent is itself a vertical flex container and we're flexible -- but we'll
// let our ancestors handle those sorts of cases.)
if (StylePosition()->mHeight.HasPercent()) {
// a percent-height, or if we're positioned and we have "top" and "bottom"
// set and have height:auto. (There are actually other cases, too -- e.g. if
// our parent is itself a vertical flex container and we're flexible -- but
// we'll let our ancestors handle those sorts of cases.)
const nsStylePosition* stylePos = StylePosition();
if (stylePos->mHeight.HasPercent() ||
(StyleDisplay()->IsAbsolutelyPositionedStyle() &&
eStyleUnit_Auto == stylePos->mHeight.GetUnit() &&
eStyleUnit_Auto != stylePos->mOffset.GetTopUnit() &&
eStyleUnit_Auto != stylePos->mOffset.GetBottomUnit())) {
AddStateBits(NS_FRAME_CONTAINS_RELATIVE_HEIGHT);
}

View File

@ -0,0 +1,20 @@
<html>
<head>
<style>
body {
margin: 0;
}
.container {
display: flex;
background-color: lime;
top: 0;
bottom: 0;
position: absolute;
width: 100px;
}
</style>
</head>
<body>
<div class="container"></div>
</body>
</html>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style>
#container {
width: 100px;
height: 100px;
background: lime;
}
</style>
</head>
<body>
<div id="container"></div>
</body>
</html>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<!--
This test checks that we sufficiently reflow abspos flex containers that
have top:0;bottom:0 (which ends up effectively being like height:100%)
the window (or the iframe we're inside of) is vertically resized.
This test should end up rendering as a lime square, 100px by 100px.
-->
<html xmlns="http://www.w3.org/1999/xhtml"
class="reftest-wait">
<head>
<style>
#frame {
width: 100px;
height: 50px;
border: 0;
}
</style>
<script>
function tweak() {
document.getElementById("frame").style.height = "100px";
document.documentElement.removeAttribute("class");
}
window.addEventListener("MozReftestInvalidate", tweak, false);
</script>
</head>
<body>
<iframe id="frame" src="flexbox-dyn-changeFrameWidth-4-iframe.html"></iframe>
</body>
</html>

View File

@ -73,6 +73,7 @@ fails == flexbox-basic-video-vert-2.xhtml flexbox-basic-video-vert-2-ref.xhtml #
== flexbox-dyn-changeFrameWidth-1.xhtml flexbox-dyn-changeFrameWidth-1-ref.xhtml
== flexbox-dyn-changeFrameWidth-2.xhtml flexbox-dyn-changeFrameWidth-2-ref.xhtml
== flexbox-dyn-changeFrameWidth-3.xhtml flexbox-dyn-changeFrameWidth-3-ref.xhtml
== flexbox-dyn-changeFrameWidth-4.xhtml flexbox-dyn-changeFrameWidth-4-ref.xhtml
== flexbox-dyn-changePadding-1a.xhtml flexbox-dyn-changePadding-1-ref.xhtml
== flexbox-dyn-changePadding-1b.xhtml flexbox-dyn-changePadding-1-ref.xhtml