Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/testing/mochitest/tests/browser/   (Firefox Browser Version 153.0.1©)  Datei vom 27.6.2026 mit Größe 9 kB image not shown  

Quelle  browser_EventUtils.js

  Sprache: JAVA
 

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

"use strict";

const gChromeBaseURL = getRootDirectory(gTestPath);
const gBaseURL = gChromeBaseURL.replace(
  "chrome://mochitests/content",
  "https://example.com"
);

async function synthesizeMouseFromParent(
  aBrowser,
  aOffsetX,
  aOffsetY,
  aAsyncEnabled
) {
  info(
    `synthesizeMouse with asyncEnabled=${aAsyncEnabled} from parent process`
  );

  let haveReceiveMouseEvent = false;
  const onMousemove = event => {
    info(
      `Received mouse event: ${event.type} ${event.offsetX} ${event.offsetY} ${event.button} ${event.buttons}`
    );
    haveReceiveMouseEvent = true;
  };
  aBrowser.addEventListener("mousemove", onMousemove, { once: true });
  await new Promise(resolve => {
    EventUtils.synthesizeMouse(
      aBrowser,
      aOffsetX,
      aOffsetY,
      {
        type: "mousemove",
        asyncEnabled: aAsyncEnabled,
      },
      window,
      () => {
        ok(haveReceiveMouseEvent, "Should have received mouse event");
        aBrowser.removeEventListener("mousemove", onMousemove);
        resolve();
      }
    );
  });
}

add_task(async function synthesizeEventFromParent() {
  async function testSynthesizeWheelFromParent(aBrowser, aAsyncEnabled) {
    info(`Testing synthesizeWheel with asyncEnabled=${aAsyncEnabled}`);

    let haveReceiveWheelEvent = false;
    const onWheel = event => {
      info(
        `Received wheel event: ${event.type} ${event.deltaX} ${event.deltaY} ${event.deltaZ} ${event.deltaMode} ${event.detail}`
      );
      haveReceiveWheelEvent = true;
    };
    aBrowser.addEventListener("wheel", onWheel, { once: true });
    await new Promise(resolve => {
      EventUtils.synthesizeWheel(
        aBrowser,
        10,
        10,
        {
          deltaMode: WheelEvent.DOM_DELTA_LINE,
          deltaY: 1.0,
          asyncEnabled: aAsyncEnabled,
        },
        window,
        () => {
          ok(haveReceiveWheelEvent, "Should have received wheel event");
          aBrowser.removeEventListener("wheel", onWheel);
          resolve();
        }
      );
    });
  }

  async function testSynthesizeMouseFromParent(aBrowser, aAsyncEnabled) {
    info(`Testing synthesizeMouse with asyncEnabled=${aAsyncEnabled}`);

    // Should throw error if the synthesized mouse evet might be coaslesced.
    await new Promise(resolve => {
      try {
        EventUtils.synthesizeMouse(
          aBrowser,
          10,
          10,
          {
            type: "mousemove",
            asyncEnabled: aAsyncEnabled,
            isSynthesized: false,
          },
          window,
          () => {
            ok(false"callback should not be called");
          }
        );
        ok(false"synthesizeMouse with  should throw");
      } catch (e) {
        ok(true, `synthesizeMouse should throw error: ${e}`);
      }
      // Wait a bit to ensure the callback is not called.
      SimpleTest.executeSoon(resolve);
    });

    await synthesizeMouseFromParent(aBrowser, 1010, aAsyncEnabled);
  }

  async function testSynthesizeTouchFromParent(aBrowser, aAsyncEnabled) {
    info(`Testing synthesizeTouch with asyncEnabled=${aAsyncEnabled}`);

    let haveReceiveTouchEvent = false;
    const onTouchEnd = event => {
      info(`Received touchend event: ${event.type} ${event.touches}`);
      haveReceiveTouchEvent = true;
    };
    aBrowser.addEventListener("touchend", onTouchEnd, { once: true });

    await new Promise(resolve => {
      try {
        EventUtils.synthesizeTouch(
          aBrowser,
          10,
          10,
          { asyncEnabled: aAsyncEnabled },
          window,
          () => {
            ok(haveReceiveTouchEvent, "Should have received touchend event");
            aBrowser.removeEventListener("touchend", onTouchEnd);
            resolve();
          }
        );
        ok(aAsyncEnabled, "synthesizeTouch should not throw");
      } catch (e) {
        ok(!aAsyncEnabled, `synthesizeTouch should throw error: ${e}`);
        aBrowser.removeEventListener("touchend", onTouchEnd);
        SimpleTest.executeSoon(resolve);
      }
    });
  }

  await BrowserTestUtils.withNewTab(
    gBaseURL + "dummy.html",
    async function (browser) {
      await testSynthesizeWheelFromParent(browser, false);
      await testSynthesizeWheelFromParent(browser, true);
      await testSynthesizeMouseFromParent(browser, false);
      await testSynthesizeMouseFromParent(browser, true);
      await testSynthesizeTouchFromParent(browser, false);
      await testSynthesizeTouchFromParent(browser, true);
    }
  );
});

add_task(async function synthesizeEventFromContent() {
  async function testSynthesizeWheelFromContent(aBrowser, aAsyncEnabled) {
    info(`Testing synthesizeWheel with asyncEnabled=${aAsyncEnabled}`);

    await SpecialPowers.spawn(
      aBrowser,
      [aAsyncEnabled],
      async aAsyncEnabled => {
        let haveReceiveWheelEvent = false;
        const onWheel = event => {
          info(
            `Received wheel event: ${event.type} ${event.deltaX} ${event.deltaY} ${event.deltaZ} ${event.deltaMode} ${event.detail}`
          );
          haveReceiveWheelEvent = true;
        };
        content.document.addEventListener("wheel", onWheel, { once: true });
        await new Promise(resolve => {
          try {
            EventUtils.synthesizeWheel(
              content.document.body,
              10,
              10,
              {
                deltaMode: content.WheelEvent.DOM_DELTA_LINE,
                deltaY: 1.0,
                asyncEnabled: aAsyncEnabled,
              },
              content.window,
              () => {
                ok(haveReceiveWheelEvent, "Should have received wheel event");
                content.document.removeEventListener("wheel", onWheel);
                resolve();
              }
            );
            ok(!aAsyncEnabled, "synthesizeWheel should not throw");
          } catch (e) {
            ok(aAsyncEnabled, `synthesizeWheel should throw error: ${e}`);
            content.document.removeEventListener("wheel", onWheel);
            resolve();
          }
        });
      }
    );
  }

  async function testSynthesizeMouseFromContent(aBrowser) {
    info(`Testing synthesizeMouse`);

    await SpecialPowers.spawn(aBrowser, [], async () => {
      try {
        EventUtils.synthesizeMouse(
          content.document.body,
          10,
          10,
          {
            type: "mousemove",
          },
          content.window,
          () => {
            ok(false"callback should not be called");
          }
        );
        ok(false"synthesizeMouse should not throw");
      } catch (e) {
        ok(true, `synthesizeMouse should throw error: ${e}`);
      }
    });
  }

  async function testSynthesizeTouchFromContent(aBrowser) {
    info(`Testing synthesizeTouch`);

    await SpecialPowers.spawn(aBrowser, [], async () => {
      try {
        EventUtils.synthesizeTouch(
          content.document.body,
          10,
          10,
          {},
          content.window,
          () => {
            ok(false"callback should not be called");
          }
        );
        ok(false"synthesizeTouch should throw error");
      } catch (e) {
        ok(true, `synthesizeTouch throws an error: ${e}`);
      }
    });
  }

  await BrowserTestUtils.withNewTab(
    gBaseURL + "dummy.html",
    async function (browser) {
      await testSynthesizeWheelFromContent(browser, false);
      await testSynthesizeWheelFromContent(browser, true);
      await testSynthesizeMouseFromContent(browser);
      await testSynthesizeTouchFromContent(browser);
    }
  );
});

add_task(async function testCallbackForCrossProcressIframe() {
  const iframeBaseURL = gChromeBaseURL.replace(
    "chrome://mochitests/content",
    "https://example.org/"
  );

  async function synthesizeMouseFromParentAndWait(
    aBrowser,
    aOffsetX,
    aOffsetY,
    aBrowsingContext
  ) {
    let eventPromise = SpecialPowers.spawn(aBrowsingContext, [], async () => {
      await new Promise(resolve => {
        content.document.addEventListener(
          "mousemove",
          () => {
            info("Received mousemove event in the target browsing context");
            resolve();
          },
          { once: true }
        );
      });
    });
    // Enuse the event listener is registered on remote target.
    await SpecialPowers.spawn(aBrowsingContext, [], async () => {
      await new Promise(resolve => {
        SpecialPowers.executeSoon(resolve);
      });
    });

    await Promise.all([
      synthesizeMouseFromParent(aBrowser, aOffsetX, aOffsetY, true),
      eventPromise,
    ]);
  }

  await BrowserTestUtils.withNewTab(
    gBaseURL + "empty.html",
    async function (browser) {
      // Synthesize mouse event to the parent document.
      await synthesizeMouseFromParentAndWait(
        browser,
        10,
        5,
        browser.browsingContext
      );

      // Add an iframe.
      await SpecialPowers.spawn(
        browser,
        [iframeBaseURL + "empty.html"],
        async url => {
          content.document.body.appendChild(
            content.document.createElement("br")
          );
          let iframe = content.document.createElement("iframe");
          iframe.src = url;
          let loadPromise = new Promise(resolve => {
            iframe.addEventListener("load", resolve, { once: true });
          });
          content.document.body.appendChild(iframe);
          await loadPromise;
        }
      );

      // Synthesize mouse event to the iframe document.
      await synthesizeMouseFromParentAndWait(
        browser,
        10,
        35,
        browser.browsingContext.children[0]
      );
    }
  );
});

Messung V0.5 in Prozent
C=97 H=98 G=97

¤ Dauer der Verarbeitung: 0.14 Sekunden  (vorverarbeitet am  2026-08-24) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

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.