window_state_context.js (1166B)
1 function window_state_context(t) { 2 let rect = null; 3 let state = "restored"; 4 t.add_cleanup(async () => { 5 if (state === "minimized") { 6 await restore(); 7 } 8 }); 9 async function restore() { 10 if (state !== "minimized") { 11 return; 12 } 13 state = "restoring"; 14 await test_driver.set_window_rect(rect); 15 state = "restored"; 16 } 17 18 async function minimize() { 19 state = "minimized"; 20 rect = await test_driver.minimize_window(); 21 } 22 23 function visibilityEventPromise() { 24 return new Promise((resolve) => 25 new PerformanceObserver((entries, observer) => { 26 observer.disconnect(); 27 resolve(); 28 }).observe({ type: "visibility-state" }) 29 ); 30 } 31 32 async function minimizeAndWait() { 33 const promise = visibilityEventPromise(); 34 await Promise.all([minimize(), promise]); 35 await new Promise((resolve) => t.step_timeout(resolve, 0)); 36 } 37 38 async function restoreAndWait() { 39 const promise = visibilityEventPromise(); 40 await Promise.all([restore(), promise]); 41 await new Promise((resolve) => t.step_timeout(resolve, 0)); 42 } 43 44 return { minimize, restore, minimizeAndWait, restoreAndWait }; 45 }