gecko-dev/dom/html/test/test_bug388794.html
Randall Barker 53f3fdea84 Bug 1223937 - test_bug388794.html fails string match test due to off by one error in Fennec with C++APZ. r=roc
When C++APZ is enabled in Fennec, events that are generated by nsWindowUtil may result in
off by one errors when received by the DOM. This is caused by the fact that the PresShell
resolution must be applied to the event coordinates before being dispatched which introduces
rounding errors. To work around the failure in test_bug388794.html it is necessary to
convert the string compares to regex so that the off by one rounding errors may be accounted for.

--HG--
extra : commitid : FCSDte8j1sG
2015-11-19 21:40:05 -05:00

105 lines
3.6 KiB
HTML

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=388794
-->
<head>
<title>Test for Bug 388794</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<style>
input { padding: 0; margin: 0; border: none; }
</style>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=388794">Mozilla Bug 388794</a>
<p id="display">
<form action="data:text/html," target="test1" method="GET">
<input id="test1image" type="image" name="testImage">
</form>
<form action="data:text/html," target="test2" method="GET">
<input id="test2image" type="image">
</form>
<form action="data:text/html," target="test3" method="GET">
<input id="test3image" type="image" src="nnc_lockup.gif" name="testImage">
</form>
<form action="data:text/html," target="test4" method="GET">
<input id="test4image" type="image" src="nnc_lockup.gif">
</form>
<form action="data:text/html," target="test5" method="GET">
<input id="test5image" type="image" src="nnc_lockup.gif" name="testImage">
</form>
<form action="data:text/html," target="test6" method="GET">
<input id="test6image" type="image" src="nnc_lockup.gif">
</form>
<iframe name="test1" id="test1"></iframe>
<iframe name="test2" id="test2"></iframe>
<iframe name="test3" id="test3"></iframe>
<iframe name="test4" id="test4"></iframe>
<iframe name="test5" id="test5"></iframe>
<iframe name="test6" id="test6"></iframe>
</p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script type="application/javascript">
/** Test for Bug 388794 **/
SimpleTest.waitForExplicitFinish();
var pendingLoads = 0;
/* Use regex due to rounding error in Fennec with C++APZ enabled */
var hrefs = {
test1: /data:text\/html,\?testImage\.x=0&testImage\.y=0/,
test2: /data:text\/html,\?x=0&y=0/,
test3: /data:text\/html,\?testImage\.x=0&testImage\.y=0/,
test4: /data:text\/html,\?x=0&y=0/,
test5: /data:text\/html,\?testImage\.x=[4-6]&testImage\.y=[4-6]/,
test6: /data:text\/html,\?x=[4-6]&y=[4-6]/,
};
function submitForm(idNum) {
$("test"+idNum).setAttribute("onload", "frameLoaded(this)");
$("test" + idNum + "image").focus();
sendKey("return");
}
function submitFormMouse(idNum) {
$("test"+idNum).setAttribute("onload", "frameLoaded(this)");
// Use 4.99 instead of 5 to guard against the possibility that the
// image's 'top' is exactly N + 0.5 pixels from the root. In that case
// we'd round up the widget mouse coordinate to N + 6, which relative
// to the image would be 5.5, which would get rounded up to 6 when
// submitting the form. Instead we round the widget mouse coordinate to
// N + 5, which relative to the image would be 4.5 which gets rounded up
// to 5.
synthesizeMouse($("test" + idNum + "image"), 4.99, 4.99, {});
}
addLoadEvent(function() {
// Need the timeout so painting has a chance to be unsuppressed.
setTimeout(function() {
submitForm(++pendingLoads);
submitForm(++pendingLoads);
submitForm(++pendingLoads);
submitForm(++pendingLoads);
submitFormMouse(++pendingLoads);
submitFormMouse(++pendingLoads);
}, 0);
});
function frameLoaded(frame) {
ok(hrefs[frame.name].test(frame.contentWindow.location.href),
"Unexpected href for frame " + frame.name, "expected to match: " + hrefs[frame.name].toString() + " got: " + frame.contentWindow.location.href);
if (--pendingLoads == 0) {
SimpleTest.finish();
}
}
</script>
</pre>
</body>
</html>