<!DOCTYPE HTML>
<script src="../../../../resources/js-test.js"></script>
<style>
html, body {
margin: 0;
}
body {
height: 1000px;
}
#target {
width: 50px;
height: 50px;
}
</style>
<iframe frameborder=0 id="target" src="resources/event-delegator-boxes.html"></iframe>
<div id=console></div>
<script>
var event;
var frameRect = target.getBoundingClientRect();
var pointInFrame = {
x: frameRect.width / 2,
y: frameRect.height / 2
};
var pointInWindow = {
x: frameRect.left + pointInFrame.x,
y: frameRect.top + pointInFrame.y
};
var eventReceived = {};
var currentOffset = 0;
var expectedOffset;
var targetRect;
function offsetFrame() {
currentOffset += 5;
target.style.marginTop = currentOffset + 'px';
target.style.marginLeft = currentOffset + 'px';
}
function onEventInFrame(e) {
// Each mouse event relies on a new hit test except for click.
if (e.type != "click")
expectedOffset = currentOffset;
debug("");
debug("Received " + e.type + " in child frame with currentOffset=" + currentOffset + " expectedOffset=" + expectedOffset);
event = e;
eventReceived[e.type] = true;
shouldBeEqualToNumber("event.screenX", pointInWindow.x);
shouldBeEqualToNumber("event.screenY", pointInWindow.y);
shouldBeEqualToNumber("event.clientX", pointInFrame.x - expectedOffset);
shouldBeEqualToNumber("event.clientY", pointInFrame.y - expectedOffset);
shouldBeEqualToNumber("event.pageX", pointInFrame.x - expectedOffset);
shouldBeEqualToNumber("event.pageY", pointInFrame.y - expectedOffset);
// Verify the node found by hit-testing actually contains the point.
// Note that 'click' is dispatched to the common ancestor of 'mousedown' and 'mouseup'.
shouldBeEqualToString("event.target.nodeName", e.type == "click" ? "BODY" : "DIV");
targetRect = event.target.getBoundingClientRect();
debug("Target element is at (" + targetRect.left + "," + targetRect.top + "," + targetRect.right + "," + targetRect.bottom + ")");
shouldBeGreaterThanOrEqual("targetRect.right", "event.clientX");
shouldBeGreaterThanOrEqual("event.clientX", "targetRect.left");
shouldBeGreaterThanOrEqual("targetRect.bottom", "event.clientY");
shouldBeGreaterThanOrEqual("event.clientY", "targetRect.top");
// Move the frame for the next event.
offsetFrame();
}
description("Verifies mouse event co-ordinates from a tap in an iframe that changes position on each mouse event");
if (window.eventSender) {
jsTestIsAsync = true;
target.onload = function() {
debug("Sending GestureTapDown to " + pointInWindow.x + "," + pointInWindow.y);
eventSender.gestureTapDown(pointInWindow.x, pointInWindow.y);
debug("Sending GestureShowPress");
eventSender.gestureShowPress(pointInWindow.x, pointInWindow.y);
debug("Sending GestureTap");
eventSender.gestureTap(pointInWindow.x, pointInWindow.y);
shouldBeTrue("eventReceived.mousemove");
shouldBeTrue("eventReceived.mousedown");
shouldBeTrue("eventReceived.mouseup");
shouldBeTrue("eventReceived.click");
setTimeout(finishJSTest, 0);
}
} else {
debug("This test requires eventSender");
}
</script>