blob: 8f61cbc18c95133561e4dd8cbffd3cdb682420e4 [file] [log] [blame]
<!DOCTYPE html>
<link rel="help" href="https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#form-submission-algorithm">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="./resources/targetted-form.js"></script>
<body>
<script>
test(() => {
let form = populateForm('<input name=n10 value=v10>');
let counter = 0;
form.addEventListener('formdata', e => {
++counter;
form.submit();
});
form.submit();
assert_equals(counter, 1);
new FormData(form);
assert_equals(counter, 2);
}, 'If constructing entry list flag of form is true, then return');
test(() => {
let form = populateForm('<input required><input type=submit><button type=submit></button>');
let submitter1 = form.querySelector('input[type=submit]');
let submitter2 = form.querySelector('button[type=submit]');
let invalid = form.querySelector('[required]');
let counter = 0;
invalid.oninvalid = () => {
++counter;
// Needs to click different one because click() has reentrancy protection.
submitter2.click();
};
submitter1.click();
assert_equals(counter, 1);
}, "If form's firing submission events is true, then return; 'invalid' event");
async_test(t => {
let form = populateForm('<input type=submit name=n value=i><button type=submit name=n value=b>');
let submitter1 = form.querySelector('input[type=submit]');
let submitter2 = form.querySelector('button[type=submit]');
let iframe = form.previousSibling;
form.onsubmit = () => {
// Needs to click different one because click() has reentrancy protection.
submitter2.click();
};
submitter1.click();
// We actually submit the form in order to check which 'click()' submits it.
iframe.onload = t.step_func_done(() => {
assert_not_equals(iframe.contentWindow.location.search.indexOf('n=i'), -1);
});
}, "If form's firing submission events is true, then return; 'submit' event");
async_test(t => {
let form = populateForm('<input name=n1 value=v1>');
form.onformdata = (e) => { e.target.remove(); };
let wasLoaded = false;
let iframe = form.previousSibling;
// Request to load '/common/dummy.xhtml', and immediately submit the form to
// the same frame. If the form submission is aborted, the first request
// will be completed.
iframe.onload = t.step_func_done(() => {
wasLoaded = true;
assert_true(iframe.contentWindow.location.search.indexOf('n1=v1') == -1);
});
iframe.src = '/common/dummy.xhtml';
assert_false(wasLoaded, 'Make sure the first loading is ongoing.');
form.submit();
}, 'Cannot navigate (after constructing the entry list)');
</script>
</body>