pagereveal-updatecallbackdone-promise.html (1219B)
1 <!DOCTYPE html> 2 <title> 3 View transitions: Test pagereveal.updateCallbackDone promise is immediately resolved. 4 </title> 5 <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> 6 <link rel="author" href="mailto:bokan@chromium.org"> 7 <script src="/resources/testharness.js"></script> 8 <script src="/resources/testharnessreport.js"></script> 9 <style> 10 @view-transition { 11 navigation: auto; 12 } 13 </style> 14 <script> 15 const params = new URLSearchParams(location.search); 16 17 // Ensures microtasks in the current event loop are flushed before control flow 18 // resumes. 19 function flushMicrotasks() { 20 return new Promise(resolve => resolve()); 21 } 22 23 switch (params.get("mode") || "test") { 24 case "test": 25 promise_test(async t => { 26 await new Promise(resolve => { 27 window.did_finish_callback = resolve; 28 const popup = window.open("?mode=old"); 29 t.add_cleanup(() => popup.close()); 30 }); 31 }); 32 break; 33 case "old": 34 onload = () => requestAnimationFrame(() => requestAnimationFrame(() => { 35 location.replace('?mode=new'); 36 })); 37 break; 38 case "new": 39 onpagereveal = e => { 40 e.viewTransition.updateCallbackDone.then(() => { 41 window.opener.did_finish_callback(); 42 }); 43 } 44 break; 45 } 46 </script>