<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="/js-test-resources/js-test.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.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>
