<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"><!-- webkit-test-runner [ AllowUniversalAccessFromFileURLs=true ] -->
<html>
<head>
<script src="../../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.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>
