Skip to content
This repository has been archived by the owner on Aug 4, 2022. It is now read-only.

Commit

Permalink
Bug 803677 - Fix offsetTop/offsetParent for element with display:tabl…
Browse files Browse the repository at this point in the history
…e-cell that have anonymous table parents. r=bzbarsky
  • Loading branch information
Benedict Singer committed Dec 11, 2012
1 parent 8bbecd7 commit 2bdf923
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 2 deletions.
14 changes: 12 additions & 2 deletions content/html/content/src/nsGenericHTMLElement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -379,8 +379,18 @@ static bool
IsOffsetParent(nsIFrame* aFrame)
{
nsIAtom* frameType = aFrame->GetType();
return (IS_TABLE_CELL(frameType) ||
frameType == nsGkAtoms::tableFrame);

if (IS_TABLE_CELL(frameType) || frameType == nsGkAtoms::tableFrame) {
// Per the IDL for Element, only td, th, and table are acceptable offsetParents
// apart from body or positioned elements; we need to check the content type as
// well as the frame type so we ignore anonymous tables created by an element
// with display: table-cell with no actual table
nsIContent* content = aFrame->GetContent();

return content->IsHTML(nsGkAtoms::table) || content->IsHTML(nsGkAtoms::td)
|| content->IsHTML(nsGkAtoms::th);
}
return false;
}

Element*
Expand Down
1 change: 1 addition & 0 deletions content/html/content/test/Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,7 @@ MOCHITEST_FILES = \
test_bug786564.html \
test_bug797113.html \
test_bug787134.html \
test_bug803677.html \
test_iframe_sandbox_inheritance.html \
file_iframe_sandbox_a_if1.html \
file_iframe_sandbox_a_if2.html \
Expand Down
50 changes: 50 additions & 0 deletions content/html/content/test/test_bug803677.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=803677
-->
<head>
<meta charset="utf-8">
<title>Test for Bug 803677</title>
<script type="application/javascript" src="/MochiKit/packed.js"></script>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="reflect.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<style>
.base { border:1px solid gray; }
.bad-table { display:table-cell; border:1px solid red; }
</style>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=803677">Mozilla Bug 803677</a>
<p id="display"></p>
<div id="content">
<p class="base">1</p>
<p class="base">2</p>
<p class="base">3</p>
<p class="base bad-table">4</p>
<p class="base">7</p>
<p class="base">8</p>
<p class="base">9</p>
</div>
<pre id="test">
<script type="application/javascript">
var p = document.querySelectorAll(".base");
var parent = document.querySelector("body");
var prevOffset = 0;
for (var i = 0; i < p.length; i++) {
var t = 0, e = p[i];
is(e.offsetParent, parent, "Offset parent of all paragraphs should be the body.");
while (e) {
t += e.offsetTop;
e = e.offsetParent;
}
p[i].innerHTML = t;

ok(t > prevOffset, "Offset should increase down the page");
prevOffset = t;
}
</script>
</pre>
</body>
</html>

0 comments on commit 2bdf923

Please sign in to comment.