<!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>
