129 lines
5.6 KiB
HTML
129 lines
5.6 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
<script src="resources/common.js"></script>
|
|
</head>
|
|
<body>
|
|
<div id="console"></div>
|
|
|
|
<input id=emptyOnFirstVisit>
|
|
|
|
<script>
|
|
jsTestIsAsync = true;
|
|
|
|
function makeForms(stage) {
|
|
var beforeForms = '<div id=parent>' +
|
|
'<input value=initial id=form3-outer1 name=before form=form3>' +
|
|
(stage == 1 ? '<input value=initial name=before id=noowner1>' : '') +
|
|
'<input value=initial id=form2-outer1 name=before form=form2>';
|
|
|
|
var backForm = '<form action="data:text/html,<script>history.back();</script>" id=form1>' +
|
|
'<input value=initial id=form1-control1 name=common-name1>' +
|
|
'<input value=initial id=form1-control2 name=common-name1>' +
|
|
'</form>';
|
|
|
|
var query = stage == 1 ? "?session=0123456" : "?session=7654321111";
|
|
var additionalControl = stage == 1 ? '' : '<input name=username id=form2-added value=initial>';
|
|
var sameActionForm1 = '<form action="http://example.com/foo.cgi' + query + '#bar" id=form2>' +
|
|
'<input value=initial id=form2-control1 name=common-name1>' +
|
|
'<input value=initial id=form2-control2 name=name2>' +
|
|
additionalControl +
|
|
'</form>';
|
|
|
|
var sameActionForm2 = '<form action="http://example.com/foo.cgi?action=login#bar" id=form3>' +
|
|
'<input value=initial id=form3-control1 name=username>' +
|
|
'<input value=initial id=form3-control2 name=common-name1>' +
|
|
'</form>';
|
|
|
|
var reorderedFormA = '<form action="PostAction" method="POST">' +
|
|
'<input type="hidden" name="task" value="AAA">' +
|
|
'<input name="aaa_input1" value=initial id=aaa_input1>' +
|
|
'<input name="aaa_input2" value=initial>' +
|
|
'</form>';
|
|
var reorderedFormB = '<form action="PostAction" method="POST">' +
|
|
'<input type="hidden" name="task" value="BBB">' +
|
|
'<input name="bbb_input1" value=initial id=bbb_input1>' +
|
|
'<input name="bbb_input2" value=initial>' +
|
|
'</form>';
|
|
var reorderedFormC = '<form action="PostAction" method="POST">' +
|
|
'<input type="hidden" name="task" value="CCC">' +
|
|
'<input name="ccc_input1" value=initial id=ccc_input1>' +
|
|
'<input name="ccc_input2" value=initial>' +
|
|
'</form>';
|
|
var reorderedSameActionForms = stage == 1 ? reorderedFormA + reorderedFormB + reorderedFormC : reorderedFormC + reorderedFormA;
|
|
|
|
var afterForms = (stage == 1 ? '' : '<input value=initial id=noowner2 name=after>') +
|
|
'<input value=initial id=form3-outer2 name=after form=form3>' +
|
|
'<input value=initial id=form2-outer2 name=after form=form2>' +
|
|
'</div>';
|
|
|
|
document.write(beforeForms +
|
|
(stage == 1 ? backForm + sameActionForm1 : sameActionForm1 + backForm) +
|
|
sameActionForm2 +
|
|
reorderedSameActionForms +
|
|
afterForms);
|
|
}
|
|
|
|
function runTest()
|
|
{
|
|
var state = $('emptyOnFirstVisit');
|
|
if (!state.value) {
|
|
// First visit.
|
|
state.value = 'visited';
|
|
makeForms(1);
|
|
|
|
setTimeout(function() {
|
|
$('form1-control2').value = 'form1-control2-modified';
|
|
$('form2-control1').value = 'query-changed-control1-modified';
|
|
$('form3-control1').value = 'username-modified';
|
|
$('form3-control2').value = 'form3-control2-modified';
|
|
$('noowner1').value = 'noowner1-modified';
|
|
$('form2-outer1').value = 'form2-outer1-modified';
|
|
$('form3-outer1').value = 'form3-outer1-modified';
|
|
$('form2-outer2').value = 'form2-outer2-modified';
|
|
$('form3-outer2').value = 'form3-outer2-modified';
|
|
$('aaa_input1').value = 'aaa_input1-modified';
|
|
$('bbb_input1').value = 'bbb_input1-modified';
|
|
$('ccc_input1').value = 'ccc_input1-modified';
|
|
$('form1').submit();
|
|
}, 0);
|
|
} else {
|
|
// Second visit.
|
|
makeForms(2);
|
|
|
|
debug('Confirm we can restore correctly even if the order of forms are changed:');
|
|
shouldBeEqualToString('$("form1-control1").value', 'initial');
|
|
shouldBeEqualToString('$("form1-control2").value', 'form1-control2-modified');
|
|
shouldBeEqualToString('$("form3-control2").value', 'form3-control2-modified');
|
|
|
|
debug('\nConfirm we ignore the query part of action URLs:');
|
|
shouldBeEqualToString('$("form2-control1").value', 'query-changed-control1-modified');
|
|
|
|
debug('\nConfirm an additional control in the previous form doesn\'t take a state for the next form:');
|
|
shouldBeEqualToString('$("form3-control1").value', 'username-modified');
|
|
shouldBeEqualToString('$("form2-added").value', 'initial');
|
|
|
|
debug('\nAssociated controls with form attributes are correctly handled:');
|
|
// Some of the followings fail. They will be resolved in webkit.org/b/89962.
|
|
shouldBeEqualToString('$("form3-outer1").value', 'form3-outer1-modified');
|
|
shouldBeEqualToString('$("form2-outer1").value', 'form2-outer1-modified');
|
|
|
|
shouldBeEqualToString('$("noowner2").value', 'initial');
|
|
shouldBeEqualToString('$("form3-outer2").value', 'form3-outer2-modified');
|
|
shouldBeEqualToString('$("form2-outer2").value', 'form2-outer2-modified');
|
|
|
|
debug('\nControls in forms with an identical action URL. These forms were reordered:');
|
|
shouldBeEqualToString('$("aaa_input1").value', 'aaa_input1-modified');
|
|
shouldBeEqualToString('$("ccc_input1").value', 'ccc_input1-modified');
|
|
|
|
$('parent').innerHTML = '';
|
|
setTimeout(function() { finishJSTest(); }, 0);
|
|
}
|
|
}
|
|
|
|
runTest();
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|