Bug 1577258 - Explicitly flush layout in an a11y test. r=eeejay
We have an optimization to avoid an expensive reflow from SetFullZoom, see
mSuppressResizeReflow[1].
That was done because we used to do a full synchronous reflow right after. We no
longer do that, but due to that member we also don't invalidate!
My second patch in this bug changes the behavior of that flag so that we don't
synchronously reflow, but we do invalidate. So in turn this test before the
change wasn't really testing the zoomed code-path since it was using the clean
layout from before the zoom operation.
a11y getBounds and co. don't flush layout (they probably should), but since with
my patch we dirty the frame tree, and dirty frames return bogus offsets, the
test starts failing.
Flush layout explicitly to ensure we're testing the zoomed code path.
[1]: https://searchfox.org/mozilla-central/rev/325c1a707819602feff736f129cb36055ba6d94f/layout/base/nsPresContext.cpp#952
Differential Revision:
https://phabricator.services.mozilla.com/D43952
<!DOCTYPE html>
<html>
<head>
<title>getOffsetAtPoint when page is zoomed</title>
<link rel="stylesheet" type="text/css"
href="chrome://mochikit/content/tests/SimpleTest/test.css" />
<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<script type="application/javascript"
src="../common.js"></script>
<script type="application/javascript"
src="../role.js"></script>
<script type="application/javascript"
src="../layout.js"></script>
<script type="application/javascript">
function doTest() {
var hyperText = getNode("paragraph");
var textNode = hyperText.firstChild;
let [x, y, width, height] = getBounds(textNode);
testOffsetAtPoint(hyperText, x + width / 2, y + height / 2,
COORDTYPE_SCREEN_RELATIVE,
hyperText.textContent.length / 2);
zoomDocument(document, 2.0);
document.body.offsetTop; // getBounds doesn't flush layout on its own, looks like.
[x, y, width, height] = getBounds(textNode);
testOffsetAtPoint(hyperText, x + width / 2, y + height / 2,
COORDTYPE_SCREEN_RELATIVE,
hyperText.textContent.length / 2);
zoomDocument(document, 1.0);
SimpleTest.finish();
}
SimpleTest.waitForExplicitFinish();
addA11yLoadEvent(doTest);
</script>
</head>
<body>
<a target="_blank"
href="https://bugzilla.mozilla.org/show_bug.cgi?id=727942"
title="getOffsetAtPoint returns incorrect value when page is zoomed">
Mozilla Bug 727942
</a>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test">
</pre>
<p id="paragraph" style="font-family: monospace;">Болтали две сороки</p>
</body>
</html>