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