<script>

if (window.testRunner)
    testRunner.waitUntilDone();

function loaded()
{
    if (!window.eventSender)
        return;

    var a = document.getElementById("a");
    var iframe = window.parent.document.getElementsByTagName("iframe")[0];

    if (iframe)
        eventSender.mouseMoveTo(a.offsetLeft + iframe.offsetLeft + 2, a.offsetTop + iframe.offsetTop + 2);
    else
        eventSender.mouseMoveTo(a.offsetLeft + 2, a.offsetTop + 2);

    eventSender.mouseDown();
    eventSender.mouseUp();
}

function clicked()
{
    window.open("notify-done.html");
}

</script>
<body onload="loaded();">
<a id="a" onclick="clicked();">Click to do a window.open</a>
</body>
