<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../fast/js/resources/js-test-pre.js"></script>
</head>
<body onload="runTest()">
<form action="resources/success.txt" method="GET" target="failFrame">
<input type="submit" id="button" formtarget="passFrame">
</form>
<script>
description("Test for the formtarget attribute in an input tag.");

function runTest()
{
    if (window.testRunner) {
        testRunner.setAllowUniversalAccessFromFileURLs(true);
        testRunner.waitUntilDone();
    }

    // Not dumping as text since the DumpRenderTree does not dump the text content of child frames.                
    var button = document.getElementById('button');
    button.click();
}

function passFrameLoaded()
{
    if (document.getElementById('pass').contentDocument.URL == "about:blank")
        return;
    testPassed("The formtarget attribute was successfully used.");
    isSuccessfullyParsed();
    if (window.testRunner)
        testRunner.notifyDone();
}

function failFrameLoaded()
{
    if (document.getElementById('fail').contentDocument.URL == "about:blank")
        return;
    testFailed("The formtarget attribute was not used.");
    isSuccessfullyParsed();
    if (window.testRunner)
        testRunner.notifyDone();
}
</script>
<iframe src="about:blank" id="pass" name="passFrame" onload="passFrameLoaded()"></iframe>
<iframe src="about:blank" id="fail" name="failFrame" onload="failFrameLoaded()"></iframe>
</body>
</html>
