Skip to content

Commit

Permalink
fix(window_state_context.js): prevent restoring if already minimized. (
Browse files Browse the repository at this point in the history
  • Loading branch information
marcoscaceres authored May 5, 2023
1 parent c56aec6 commit 78e46a7
Showing 1 changed file with 37 additions and 29 deletions.
66 changes: 37 additions & 29 deletions page-visibility/resources/window_state_context.js
Original file line number Diff line number Diff line change
@@ -1,37 +1,45 @@
function window_state_context(t) {
let rect = null;
let state = "restored";
t.add_cleanup(async () => {
if (state === "minimized")
await restore();
});
async function restore() {
state = "restored";
await test_driver.set_window_rect(rect);
let rect = null;
let state = "restored";
t.add_cleanup(async () => {
if (state === "minimized") {
await restore();
}

async function minimize() {
state = "minimized";
rect = await test_driver.minimize_window();
});
async function restore() {
if (state !== "minimized") {
return;
}
state = "restoring";
await test_driver.set_window_rect(rect);
state = "restored";
}

function visibilityEventPromise() {
return new Promise(resolve => new PerformanceObserver(
(entries, observer) => { observer.disconnect(); resolve(); }).observe(
{type: "visibility-state"}))
}
async function minimize() {
state = "minimized";
rect = await test_driver.minimize_window();
}

async function minimizeAndWait() {
const promise = visibilityEventPromise();
await Promise.all([minimize(), promise]);
await new Promise(resolve => t.step_timeout(resolve, 0));
}
function visibilityEventPromise() {
return new Promise((resolve) =>
new PerformanceObserver((entries, observer) => {
observer.disconnect();
resolve();
}).observe({ type: "visibility-state" })
);
}

async function restoreAndWait() {
const promise = visibilityEventPromise();
await Promise.all([restore(), promise]);
await new Promise(resolve => t.step_timeout(resolve, 0));
}
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};
return { minimize, restore, minimizeAndWait, restoreAndWait };
}

0 comments on commit 78e46a7

Please sign in to comment.