<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<form id="form" method="post" action="">
<input type="submit" id="submit1">
<input type="image" id="submit2">
<button type="submit" id="submit3">
</form>
<script>
promise_test(async () => {
await new Promise(r => window.onload = r);
let sourceElement;
navigation.onnavigate = e => {
e.preventDefault();
sourceElement = e.sourceElement;
};
form.requestSubmit(submit1);
await new Promise(r => navigation.onnavigateerror = r);
assert_equals(sourceElement, submit1);
form.requestSubmit(submit2);
await new Promise(r => navigation.onnavigateerror = r);
assert_equals(sourceElement, submit2);
form.requestSubmit(submit3);
await new Promise(r => navigation.onnavigateerror = r);
assert_equals(sourceElement, submit3);
form.requestSubmit();
await new Promise(r => navigation.onnavigateerror = r);
assert_equals(sourceElement, form);
}, "<form> requestSubmit() sets sourceElement");
</script>