tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }