Fix offsetLeft/Top regression for rel.pos. elements with a table(cell) offset parent. b=384419 r+sr=roc
git-svn-id: svn://10.0.0.236/trunk@228622 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
57
mozilla/content/html/content/test/test_bug384419.html
Normal file
57
mozilla/content/html/content/test/test_bug384419.html
Normal 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>
|
||||
Reference in New Issue
Block a user