after-transition-change-history-scroll-restoration-during-promise.html (1209B)
1 <!doctype html> 2 <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1"> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <body> 6 <div style="height: 200vh; width: 200vw;"></div> 7 <div id="frag"></div> 8 <script> 9 promise_test(async t => { 10 // Wait for after the load event so that the navigation doesn't get converted 11 // into a replace navigation. 12 await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0)); 13 assert_equals(window.scrollY, 0); 14 15 history.scrollRestoration = "manual"; 16 await navigation.navigate("#frag").finished; 17 assert_not_equals(window.scrollY, 0); 18 19 let intercept_resolve; 20 navigation.onnavigate = e => { 21 e.intercept({ handler: () => new Promise(r => intercept_resolve = r), 22 scroll: "after-transition" }); 23 }; 24 25 let back_promises = navigation.back(); 26 await back_promises.committed; 27 history.scrollRestoration = "auto"; 28 intercept_resolve(); 29 await back_promises.finished; 30 assert_equals(window.scrollY, 0); 31 }, "scroll: after-transition should ignore history.scrollRestoration even if it changes in the middle of the navigation"); 32 </script> 33 </body>