<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body onload="runTest()">
<p>Test to NOT restore form state to a form with autocomplete=off.</p>
<div id="console"></div>

<input id=emptyOnFirstVisit>
<div id=parent>
<form action="data:text/html,<script>history.back()&lt;/script>" id=form1 autocomplete=off>
<input name=user id=input1>
<textarea name=comment id=textarea1></textarea>
<select name=os id=select1><option>Mac<option>Windows<option>BSD</select>
</form>
<form action="data:text/html,<script>history.back()&lt;/script>" id=form2>
<input name=user id=input2>
<textarea name=comment id=textarea2></textarea>
<select name=os id=select2><option>Mac<option>Windows<option>BSD</select>
</form>
</div>

<script>

function runTest()
{
    var parent = document.getElementById('parent');
    var state = document.getElementById('emptyOnFirstVisit');
    if (!state.value) {
        // First visit.
        if (window.testRunner)
            testRunner.waitUntilDone();
        state.value = 'visited';
    
        document.getElementById('input1').value = 'value1';
        document.getElementById('textarea1').value = 'nice';
        document.getElementById('select1').value = 'Windows';
        document.getElementById('input2').value = 'value2';
        document.getElementById('textarea2').value = 'good';
        document.getElementById('select2').value = 'BSD';
        // Submit form in a timeout to make sure that we create a new back/forward list item.            
        setTimeout(function() {document.getElementById('form2').submit();}, 0);
    } else {
        // Second visit.
        debug('Controls in the first form should have their default values:');
        shouldBe('document.getElementById("input1").value', '""');
        shouldBe('document.getElementById("textarea1").value', '""');
        shouldBe('document.getElementById("select1").value', '"Mac"');
        debug('Controls in the second form should have edited values:');
        shouldBe('document.getElementById("input2").value', '"value2"');
        shouldBe('document.getElementById("textarea2").value', '"good"');
        shouldBe('document.getElementById("select2").value', '"BSD"');
        if (window.testRunner)
            testRunner.notifyDone();
    }
 }
</script>
</body>
