<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../../../resources/js-test-pre.js"></script>
</head>
<body>
<iframe src="resources/drag-inside-nested-iframes2.html"></iframe>
<p>This test checks that a long press gesture on a draggable element in an iframe starts a drag/drop session.</p>
<div id="text">Testing</div>
<div id="result">FAIL</div>
<script>
function onDragStart() {
    document.getElementById("result").innerHTML = "PASS";
    if (window.testRunner) {
        testRunner.notifyDone();
    }
}
function runTest()
{
    if (window.testRunner)
        testRunner.dumpAsText();

    if (window.internals)
        internals.settings.setTouchDragDropEnabled(true);

    if (!window.eventSender)
        return;
    if (eventSender.gestureLongPress) {
        eventSender.gestureLongPress(20, 20);
        eventSender.mouseUp();
    } else {
        debug("gestureLongPress not implemented by this platform");
        return;
    }
}
if (window.testRunner) {
    testRunner.waitUntilDone();
}
</script>
</body>
</html>
