currententrychange-before-popstate-intercept.html (1930B)
1 <!doctype html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script> 5 promise_test(async t => { 6 let start_length = navigation.entries().length; 7 // Wait for after the load event so that the navigation doesn't get converted 8 // into a replace navigation. 9 await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0)); 10 await navigation.navigate("#foo").committed; 11 assert_equals(navigation.entries().length, start_length + 1); 12 13 navigation.onnavigate = e => e.intercept(); 14 15 let oncurrententrychange_back_called = false; 16 let onpopstate_back_called = false; 17 window.onpopstate = t.step_func(e => { 18 onpopstate_back_called = true; 19 assert_true(oncurrententrychange_back_called); 20 }); 21 navigation.oncurrententrychange = t.step_func(e => { 22 oncurrententrychange_back_called = true; 23 assert_false(onpopstate_back_called); 24 }); 25 let back_result = navigation.back(); 26 assert_false(oncurrententrychange_back_called); 27 assert_false(onpopstate_back_called); 28 await back_result.finished; 29 assert_true(oncurrententrychange_back_called); 30 assert_true(onpopstate_back_called); 31 32 let oncurrententrychange_forward_called = false; 33 let onpopstate_forward_called = false; 34 window.onpopstate = t.step_func(e => { 35 onpopstate_forward_called = true; 36 assert_true(oncurrententrychange_forward_called); 37 }); 38 navigation.oncurrententrychange = t.step_func(e => { 39 oncurrententrychange_forward_called = true; 40 assert_false(onpopstate_forward_called); 41 }); 42 let forward_result = navigation.forward(); 43 assert_false(oncurrententrychange_forward_called); 44 assert_false(onpopstate_forward_called); 45 await forward_result.finished; 46 assert_true(oncurrententrychange_back_called); 47 assert_true(onpopstate_forward_called); 48 }, "currententrychange fires before popstate for navigation.back() and navigation.forward()"); 49 </script>