focus-reset-timing.html (2109B)
1 <!doctype html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <body> 5 <script> 6 promise_test(async t => { 7 navigation.addEventListener("navigate", e => { 8 e.intercept({ focusReset: "after-transition" }); 9 }, { once: true }); 10 11 const button = document.body.appendChild(document.createElement("button")); 12 const button2 = document.body.appendChild(document.createElement("button")); 13 button2.tabIndex = 0; 14 t.add_cleanup(() => { 15 button.remove(); 16 button2.remove(); 17 }); 18 19 assert_equals(document.activeElement, document.body, "Start on body"); 20 button.focus(); 21 assert_equals(document.activeElement, button, "focus() worked"); 22 23 let navigatesuccess_called = false; 24 navigation.onnavigatesuccess = t.step_func(() => { 25 navigatesuccess_called = true; 26 assert_equals(document.activeElement, document.body, "Focus must be reset before navigatesuccess"); 27 }); 28 29 await navigation.navigate("#1").finished; 30 assert_true(navigatesuccess_called); 31 }, "Focus should be reset before navigatesuccess"); 32 33 promise_test(async t => { 34 navigation.addEventListener("navigate", e => { 35 e.intercept({ handler: () => Promise.reject(), 36 focusReset: "after-transition" }); 37 }, { once: true }); 38 39 const button = document.body.appendChild(document.createElement("button")); 40 const button2 = document.body.appendChild(document.createElement("button")); 41 button2.tabIndex = 0; 42 t.add_cleanup(() => { 43 button.remove(); 44 button2.remove(); 45 }); 46 47 assert_equals(document.activeElement, document.body, "Start on body"); 48 button.focus(); 49 assert_equals(document.activeElement, button, "focus() worked"); 50 51 let navigateerror_called = false; 52 navigation.onnavigateerror = t.step_func(() => { 53 navigateerror_called = true; 54 assert_equals(document.activeElement, document.body, "Focus must be reset before navigateerror"); 55 }); 56 57 await promise_rejects_exactly(t, undefined, navigation.navigate("#2").finished); 58 assert_true(navigateerror_called); 59 }, "Focus should be reset before navigateerror"); 60 </script> 61 </body>