tor-browser

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

browser_cancel_caret_browsing_in_content.js (3075B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 add_task(async function () {
      7  const kPrefName_CaretBrowsingOn = "accessibility.browsewithcaret";
      8  await SpecialPowers.pushPrefEnv({
      9    set: [
     10      ["accessibility.browsewithcaret_shortcut.enabled", true],
     11      ["accessibility.warn_on_browsewithcaret", false],
     12      ["test.events.async.enabled", true],
     13      [kPrefName_CaretBrowsingOn, false],
     14    ],
     15  });
     16 
     17  await BrowserTestUtils.withNewTab(
     18    "https://example.com/browser/browser/base/content/test/keyboard/file_empty.html",
     19    async function (browser) {
     20      await SpecialPowers.spawn(browser, [], () => {
     21        content.document.documentElement.scrollTop; // Flush layout.
     22      });
     23      function promiseFirstAndReplyKeyEvents(aExpectedConsume) {
     24        return new Promise(resolve => {
     25          const eventType = aExpectedConsume ? "keydown" : "keypress";
     26          let eventCount = 0;
     27          let listener = () => {
     28            if (++eventCount === 2) {
     29              window.removeEventListener(eventType, listener, {
     30                capture: true,
     31                mozSystemGroup: true,
     32              });
     33              resolve();
     34            }
     35          };
     36          window.addEventListener(eventType, listener, {
     37            capture: true,
     38            mozSystemGroup: true,
     39          });
     40          registerCleanupFunction(() => {
     41            window.removeEventListener(eventType, listener, {
     42              capture: true,
     43              mozSystemGroup: true,
     44            });
     45          });
     46        });
     47      }
     48      let promiseReplyF7KeyEvents = promiseFirstAndReplyKeyEvents(false);
     49      EventUtils.synthesizeKey("KEY_F7");
     50      info("Waiting reply F7 keypress event...");
     51      await promiseReplyF7KeyEvents;
     52      await TestUtils.waitForTick();
     53      is(
     54        Services.prefs.getBoolPref(kPrefName_CaretBrowsingOn),
     55        true,
     56        "F7 key should enable caret browsing mode"
     57      );
     58 
     59      await SpecialPowers.pushPrefEnv({
     60        set: [[kPrefName_CaretBrowsingOn, false]],
     61      });
     62 
     63      await SpecialPowers.spawn(browser, [], () => {
     64        content.document.documentElement.scrollTop; // Flush layout.
     65        content.window.addEventListener(
     66          "keydown",
     67          event => event.preventDefault(),
     68          { capture: true }
     69        );
     70      });
     71      promiseReplyF7KeyEvents = promiseFirstAndReplyKeyEvents(true);
     72      EventUtils.synthesizeKey("KEY_F7");
     73      info("Waiting for reply F7 keydown event...");
     74      await promiseReplyF7KeyEvents;
     75      try {
     76        info(`Checking reply keypress event is not fired...`);
     77        await TestUtils.waitForCondition(
     78          () => Services.prefs.getBoolPref(kPrefName_CaretBrowsingOn),
     79          "",
     80          100, // interval
     81          5 // maxTries
     82        );
     83      } catch (e) {}
     84      is(
     85        Services.prefs.getBoolPref(kPrefName_CaretBrowsingOn),
     86        false,
     87        "F7 key shouldn't enable caret browsing mode because F7 keydown event is consumed by web content"
     88      );
     89    }
     90  );
     91 });