function window_state_context(t) {
let rect = null;
let state = "restored";
t.add_cleanup(async () => {
if (state === "minimized") {
await restore();
}
});
async function restore() {
if (state !== "minimized") {
return;
}
state = "restoring";
await test_driver.set_window_rect(rect);
state = "restored";
}
async function minimize() {
state = "minimized";
rect = await test_driver.minimize_window();
}
function visibilityEventPromise() {
return new Promise((resolve) =>
new PerformanceObserver((entries, observer) => {
observer.disconnect();
resolve();
}).observe({ type: "visibility-state" })
);
}
async function minimizeAndWait() {
const promise = visibilityEventPromise();
await Promise.all([minimize(), promise]);
await new Promise((resolve) => t.step_timeout(resolve, 0));
}
async function restoreAndWait() {
const promise = visibilityEventPromise();
await Promise.all([restore(), promise]);
await new Promise((resolve) => t.step_timeout(resolve, 0));
}
return { minimize, restore, minimizeAndWait, restoreAndWait };
}