Fix offsetLeft/Top regression for rel.pos. elements with a table(cell) offset parent. b=384419 r+sr=roc

This commit is contained in:
mats.palmgren@bredband.net 2007-06-23 00:39:04 -07:00
parent 40e8228382
commit 3832520367
3 changed files with 62 additions and 5 deletions

View File

@ -581,7 +581,7 @@ nsGenericHTMLElement::GetOffsetRect(nsRect& aRect, nsIContent** aOffsetParent)
// Add the parent's origin to our own to get to the
// right coordinate system.
PRBool isOffsetParent = IsOffsetParent(parent);
const PRBool isOffsetParent = !isPositioned && IsOffsetParent(parent);
if (!isAbsolutelyPositioned && !isOffsetParent) {
origin += parent->GetPositionIgnoringScrolling();
}
@ -592,10 +592,9 @@ nsGenericHTMLElement::GetOffsetRect(nsRect& aRect, nsIContent** aOffsetParent)
break;
}
// If the tag of this frame is a offset parent tag and this
// element is *not* positioned, break here. Also break if we
// hit the body element.
if ((!isPositioned && isOffsetParent) || IsBody(content)) {
// Break if the ancestor frame type makes it suitable as offset parent
// and this element is *not* positioned or if we found the body element.
if (isOffsetParent || IsBody(content)) {
*aOffsetParent = content;
NS_ADDREF(*aOffsetParent);
break;

View File

@ -75,6 +75,7 @@ _TEST_FILES = test_bug589.html \
test_bug372098.html \
test_bug375003-1.html \
test_bug375003-2.html \
test_bug384419.html \
$(NULL)
libs:: $(_TEST_FILES)

View File

@ -0,0 +1,57 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=384419
-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Test for bug 384419</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
<style type="text/css">
html,body {
color:black; background-color:white; font-size:16px; padding:0; margin:0;
}
body { margin: 10px; }
table { border:15px solid black; margin-left:100px; }
</style>
<script type="text/javascript">
function t3(id,expected,pid) {
var el = document.getElementById(id);
var actual = el.offsetLeft;
is(actual, expected, id+".offsetLeft");
var p = document.getElementById(id).offsetParent;
is(p.id, pid, id+".offsetParent");
}
function run_test() {
t3('rel384419',135,'body');
t3('abs384419',135,'body');
t3('fix384419',135,'body');
}
</script>
</head>
<body id="body">
<!-- It's important for the test that the tables below are directly inside body -->
<table cellpadding="7" cellspacing="3"><tr><td width="100"><div id="rel384419" style="position:relative;border:1px solid blue">X</div> relative</table>
<table cellpadding="7" cellspacing="3"><tr><td width="100"><div id="abs384419" style="position:absolute;border:1px solid blue">X</div> absolute</table>
<table cellpadding="7" cellspacing="3"><tr><td width="100"><div id="fix384419" style="position:fixed;border:1px solid blue">X</div> fixed</table>
<pre id="test">
<script class="testbody" type="text/javascript">
run_test();
</script>
</pre>
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=384419">bug 384419</a>
</body>
</html>