Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/dom/base/test/fullscreen/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 5 kB image not shown  

Quelle  browser_fullscreen-sizemode.js   Sprache: JAVA

 
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */


"use strict";

const isMac = AppConstants.platform == "macosx";
const isWin = AppConstants.platform == "win";

async function waitForSizeMode(aWindow, aSizeMode) {
  await BrowserTestUtils.waitForEvent(aWindow, "sizemodechange"false, () => {
    return aWindow.windowState === aSizeMode;
  });
  const expectedHidden =
    aSizeMode == aWindow.STATE_MINIMIZED || aWindow.isFullyOccluded;
  if (aWindow.document.hidden != expectedHidden) {
    await BrowserTestUtils.waitForEvent(aWindow, "visibilitychange");
  }
  is(
    aWindow.document.hidden,
    expectedHidden,
    "Should be inactive if minimized or occluded"
  );
}

async function checkSizeModeAndFullscreenState(
  aWindow,
  aSizeMode,
  aFullscreen,
  aFullscreenEventShouldHaveFired,
  aStepFun
) {
  let promises = [];
  if (aWindow.windowState != aSizeMode) {
    promises.push(waitForSizeMode(aWindow, aSizeMode));
  }
  if (aFullscreenEventShouldHaveFired) {
    promises.push(
      BrowserTestUtils.waitForEvent(
        aWindow,
        aFullscreen ? "willenterfullscreen" : "willexitfullscreen"
      )
    );
    promises.push(BrowserTestUtils.waitForEvent(aWindow, "fullscreen"));
  }

  // Add listener for unexpected event.
  let unexpectedEventListener = aEvent => {
    ok(false, `should not receive ${aEvent.type} event`);
  };
  if (aFullscreenEventShouldHaveFired) {
    aWindow.addEventListener(
      aFullscreen ? "willexitfullscreen" : "willenterfullscreen",
      unexpectedEventListener
    );
  } else {
    aWindow.addEventListener("willenterfullscreen", unexpectedEventListener);
    aWindow.addEventListener("willexitfullscreen", unexpectedEventListener);
    aWindow.addEventListener("fullscreen", unexpectedEventListener);
  }

  let eventPromise = Promise.all(promises);
  aStepFun();
  await eventPromise;

  // Check SizeMode.
  is(
    aWindow.windowState,
    aSizeMode,
    "The new sizemode should have the expected value"
  );
  // Check Fullscreen state.
  is(
    aWindow.fullScreen,
    aFullscreen,
    `chrome window should ${aFullscreen ? "be" : "not be"} in fullscreen`
  );
  is(
    aWindow.document.documentElement.hasAttribute("inFullscreen"),
    aFullscreen,
    `chrome documentElement should ${
      aFullscreen ? "have" : "not have"
    } inFullscreen attribute`
  );

  // Remove listener for unexpected event.
  if (aFullscreenEventShouldHaveFired) {
    aWindow.removeEventListener(
      aFullscreen ? "willexitfullscreen" : "willenterfullscreen",
      unexpectedEventListener
    );
  } else {
    aWindow.removeEventListener("willenterfullscreen", unexpectedEventListener);
    aWindow.removeEventListener("willexitfullscreen", unexpectedEventListener);
    aWindow.removeEventListener("fullscreen", unexpectedEventListener);
  }
}

async function restoreWindowToNormal(aWindow) {
  while (aWindow.windowState != aWindow.STATE_NORMAL) {
    info(`Try to restore window with state ${aWindow.windowState} to normal`);
    let eventPromise = BrowserTestUtils.waitForEvent(aWindow, "sizemodechange");
    aWindow.restore();
    await eventPromise;
    info(`Window is now in state ${aWindow.windowState}`);
  }
}

add_task(async function test_fullscreen_restore() {
  let win = await BrowserTestUtils.openNewBrowserWindow();
  await restoreWindowToNormal(win);

  info("Enter fullscreen");
  await checkSizeModeAndFullscreenState(
    win,
    win.STATE_FULLSCREEN,
    true,
    true,
    () => {
      win.fullScreen = true;
    }
  );

  info("Restore window");
  await checkSizeModeAndFullscreenState(
    win,
    win.STATE_NORMAL,
    false,
    true,
    () => {
      win.restore();
    }
  );

  await BrowserTestUtils.closeWindow(win);
});

// This test only enable on Windows because:
// - Test gets intermittent timeout on macOS, see bug 1828848.
// - Restoring a fullscreen window on GTK doesn't return it to the previous
//   sizemode, see bug 1828837.
if (isWin) {
  add_task(async function test_maximize_fullscreen_restore() {
    let win = await BrowserTestUtils.openNewBrowserWindow();
    await restoreWindowToNormal(win);

    info("Maximize window");
    await checkSizeModeAndFullscreenState(
      win,
      win.STATE_MAXIMIZED,
      false,
      false,
      () => {
        win.maximize();
      }
    );

    info("Enter fullscreen");
    await checkSizeModeAndFullscreenState(
      win,
      win.STATE_FULLSCREEN,
      true,
      true,
      () => {
        win.fullScreen = true;
      }
    );

    info("Restore window");
    await checkSizeModeAndFullscreenState(
      win,
      win.STATE_MAXIMIZED,
      false,
      true,
      () => {
        win.restore();
      }
    );

    await BrowserTestUtils.closeWindow(win);
  });
}

// Restoring a minimized window on macOS doesn't return it to the previous
// sizemode, see bug 1828706.
if (!isMac) {
  add_task(async function test_fullscreen_minimize_restore() {
    let win = await BrowserTestUtils.openNewBrowserWindow();
    await restoreWindowToNormal(win);

    info("Enter fullscreen");
    await checkSizeModeAndFullscreenState(
      win,
      win.STATE_FULLSCREEN,
      true,
      true,
      () => {
        win.fullScreen = true;
      }
    );

    info("Minimize window");
    await checkSizeModeAndFullscreenState(
      win,
      win.STATE_MINIMIZED,
      true,
      false,
      () => {
        win.minimize();
      }
    );

    info("Restore window");
    await checkSizeModeAndFullscreenState(
      win,
      win.STATE_FULLSCREEN,
      true,
      false,
      () => {
        win.restore();
      }
    );

    await BrowserTestUtils.closeWindow(win);
  });
}

Messung V0.5
C=93 H=89 G=90

¤ Dauer der Verarbeitung: 0.2 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.