tor-browser

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

browser_mouse_click_screenXY.js (1785B)


      1 "use strict";
      2 
      3 function waitForClickEvent(aTarget) {
      4  return new Promise(resolve => {
      5    aTarget.addEventListener(
      6      "click",
      7      e => {
      8        resolve({ screenX: e.screenX, screenY: e.screenY });
      9      },
     10      { once: true }
     11    );
     12  });
     13 }
     14 
     15 function waitForRemoteClickEvent(aRemote) {
     16  return SpecialPowers.spawn(aRemote, [], () => {
     17    return new Promise(resolve => {
     18      content.document.addEventListener(
     19        "click",
     20        e => {
     21          resolve({ screenX: e.screenX, screenY: e.screenY });
     22        },
     23        { once: true }
     24      );
     25    });
     26  });
     27 }
     28 
     29 function executeSoonRemote(aRemote) {
     30  return SpecialPowers.spawn(aRemote, [], () => {
     31    return new Promise(resolve => {
     32      SpecialPowers.executeSoon(resolve);
     33    });
     34  });
     35 }
     36 
     37 add_task(async function testClickScreenXY() {
     38  await BrowserTestUtils.withNewTab(
     39    "https://example.com/browser/browser/base/content/test/general/dummy_page.html",
     40    async browser => {
     41      let parentPromise = waitForClickEvent(document);
     42      let contentPromise = waitForRemoteClickEvent(browser);
     43      // Ensure the event listener has registered on the remote.
     44      await executeSoonRemote(browser);
     45 
     46      // We intentionally turn off this a11y check, because the following click
     47      // is send on the <browser> to test click event, that's not meant to be
     48      // interactive and is not expected to be accessible:
     49      AccessibilityUtils.setEnv({
     50        mustHaveAccessibleRule: false,
     51      });
     52      EventUtils.synthesizeMouseAtCenter(browser, {});
     53      AccessibilityUtils.resetEnv();
     54 
     55      let parent = await parentPromise;
     56      let content = await contentPromise;
     57 
     58      is(parent.screenX, content.screenX, "check screenX");
     59      is(parent.screenY, content.screenY, "check screenY");
     60    }
     61  );
     62 });