Bug 1093686 - Add a test to ensure event listeners on the body don't affect event retargeting. r=roc

This commit is contained in:
Kartikaya Gupta 2014-11-06 08:05:51 -05:00
Родитель 371ecd8746
Коммит a1f6f203be
3 изменённых файлов: 127 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,84 @@
<!DOCTYPE HTML>
<html id="html" style="height:100%">
<head>
<title>Testing effect of listener on body</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>
.target { position:absolute; left:200px; top:200px; width:200px; height:200px; background:blue; }
</style>
</head>
<body id="body" onload="setTimeout(runTest, 0)" style="margin:0; width:100%; height:100%; overflow:hidden">
<div id="content">
<div id="ruler" style="position:absolute; left:0; top:0; width:1mozmm; height:0;"></div>
<div class="target" id="t"></div>
</div>
<pre id="test">
<script type="application/javascript">
var eventTarget;
window.onmousedown = function(event) { eventTarget = event.target; };
// Make sure the target div is "clickable" by adding a click listener on it.
document.getElementById('t').addEventListener('click', function(e) {
parent.ok(true, "target was clicked on");
}, false);
// Helper functions
function testMouseClick(aX, aY, aExpectedId, aMsg) {
eventTarget = null;
synthesizeMouseAtPoint(aX, aY, {});
try {
parent.is(eventTarget.id, aExpectedId,
"checking offset " + aX + "," + aY + " hit " + aExpectedId + " [" + aMsg + "]");
} catch (ex) {
parent.ok(false, "checking offset " + aX + "," + aY + " hit " + aExpectedId + " [" + aMsg + "]; got " + eventTarget);
}
}
function testWithAndWithoutBodyListener(aX, aY, aExpectedId, aMsg) {
var func = function(e) {
// no-op function
parent.ok(true, "body was clicked on");
};
testMouseClick(aX, aY, aExpectedId, aMsg + " without listener on body");
document.body.addEventListener("click", func, false);
testMouseClick(aX, aY, aExpectedId, aMsg + " with listener on body");
document.body.removeEventListener("click", func, false);
}
// Main tests
var mm;
function runTest() {
mm = document.getElementById("ruler").getBoundingClientRect().width;
parent.ok(4*mm >= 10, "WARNING: mm " + mm + " too small in this configuration. Test results will be bogus");
// Test near the target, check it hits the target
testWithAndWithoutBodyListener(200 - 2*mm, 200 - 2*mm, "t", "basic click retargeting");
// Test on the target, check it hits the target
testWithAndWithoutBodyListener(200 + 15*mm, 200 + 15*mm, "t", "direct click");
// Test outside the target, check it hits the root
testWithAndWithoutBodyListener(40, 40, "body", "click way outside target");
SpecialPowers.pushPrefEnv({"set": [["ui.mouse.radius.enabled", false]]}, runTest2);
}
function runTest2() {
// In this test, mouse event retargeting is disabled.
// Test near the target, check it hits the body
testWithAndWithoutBodyListener(200 - 2*mm, 200 - 2*mm, "body", "basic click retargeting");
// Test on the target, check it hits the target
testWithAndWithoutBodyListener(200 + 15*mm, 200 + 15*mm, "t", "direct click");
// Test outside the target, check it hits the root
testWithAndWithoutBodyListener(40, 40, "body", "click way outside target");
parent.finishTest();
}
</script>
</pre>
</body>
</html>

Просмотреть файл

@ -506,3 +506,5 @@ support-files = bug1078327_inner.html
[test_bug1080361.html]
support-files = bug1080361_inner.html
[test_touchcaret_visibility.html]
[test_bug1093686.html]
support-files = bug1093686_inner.html

Просмотреть файл

@ -0,0 +1,41 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1093686
-->
<head>
<meta charset="utf-8">
<title>Testing effect of listener on body with respect to event retargeting</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<script type="text/javascript">
var iframe = undefined;
function prepareTest() {
SimpleTest.waitForExplicitFinish();
iframe = document.getElementById("testFrame");
turnOnEventRetargeting(startTest);
}
function turnOnEventRetargeting(callback) {
SpecialPowers.pushPrefEnv({
"set": [
["ui.mouse.radius.enabled", true],
["ui.mouse.radius.inputSource.touchOnly", false],
["ui.mouse.radius.leftmm", 8],
["ui.mouse.radius.topmm", 12],
["ui.mouse.radius.rightmm", 8],
["ui.mouse.radius.bottommm", 4]
]
}, callback);
}
function startTest() {
iframe.src = "bug1093686_inner.html";
}
function finishTest() {
SimpleTest.finish();
}
</script>
</head>
<body onload="prepareTest()">
<iframe id="testFrame" height="700" width="700"></iframe>
</body>
</html>