<!DOCTYPE html>
<html>
<head>
<script src="resources/link-highlight-helper.js"></script>
</head>
<body onLoad="runTest();">
<iframe id="nestingFrame" src="resources/1-nested-frame-composited.html" style="position: relative; left: 10px; top: 10px; width: 450px; height: 150px;"></iframe>
<div style="position: relative; left: 10px; top: 20px;">
This test is successful if "Target Link" is covered by a green box with square corners.
</div>
<script>
function runTest() {
    useMockHighlight();
    var nestingFrame = document.getElementById('nestingFrame');
    var targetFrame = nestingFrame.contentDocument.getElementById('targetFrame');
    var clientRect = targetFrame.contentDocument.getElementById('targetLink').getBoundingClientRect();
    x = (clientRect.left + clientRect.right) / 2;
    y = (clientRect.top + clientRect.bottom) / 2 + nestingFrame.getBoundingClientRect().top + targetFrame.getBoundingClientRect().top;
    if (window.testRunner)
        testRunner.waitUntilDone();

    if (window.eventSender) {
        eventSender.gestureShowPress(x, y);
        window.setTimeout(function() { testRunner.notifyDone(); }, 0);
    } else {
        debug("This test requires DumpRenderTree.");
    }
}
</script>
</body>
</html>
