tor-browser

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

browser_contextmenu_input.js (9448B)


      1 "use strict";
      2 
      3 let contextMenu;
      4 
      5 const NAVIGATION_ITEMS =
      6  AppConstants.platform == "macosx"
      7    ? [
      8        "context-back",
      9        false,
     10        "context-forward",
     11        false,
     12        "context-reload",
     13        true,
     14        "---",
     15        null,
     16        "context-bookmarkpage",
     17        true,
     18      ]
     19    : [
     20        "context-navigation",
     21        null,
     22        [
     23          "context-back",
     24          false,
     25          "context-forward",
     26          false,
     27          "context-reload",
     28          true,
     29          "context-bookmarkpage",
     30          true,
     31        ],
     32        null,
     33        "---",
     34        null,
     35      ];
     36 
     37 const askChatMenu = [
     38  "context-ask-chat",
     39  true,
     40  // Need a blank entry here because the Ask Chat submenu is dynamically built with no ids.
     41  "",
     42  null,
     43 ];
     44 
     45 add_task(async function test_setup() {
     46  const example_base =
     47    // eslint-disable-next-line @microsoft/sdl/no-insecure-url
     48    "http://example.com/browser/browser/base/content/test/contextMenu/";
     49  const url = example_base + "subtst_contextmenu_input.html";
     50  await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
     51 
     52  const chrome_base =
     53    "chrome://mochitests/content/browser/browser/base/content/test/contextMenu/";
     54  const contextmenu_common = chrome_base + "contextmenu_common.js";
     55  /* import-globals-from contextmenu_common.js */
     56  Services.scriptloader.loadSubScript(contextmenu_common, this);
     57 });
     58 
     59 add_task(async function test_text_input() {
     60  await test_contextmenu(
     61    "#input_text",
     62    [
     63      "context-undo",
     64      false,
     65      "context-redo",
     66      false,
     67      "---",
     68      null,
     69      "context-cut",
     70      false,
     71      "context-copy",
     72      false,
     73      "context-paste",
     74      null, // ignore clipboard state
     75      "context-delete",
     76      false,
     77      "context-selectall",
     78      false,
     79      "---",
     80      null,
     81      ...askChatMenu,
     82      "---",
     83      null,
     84      "spell-check-enabled",
     85      true,
     86    ],
     87    {
     88      awaitOnMenuBuilt: {
     89        id: "context-ask-chat",
     90      },
     91    }
     92  );
     93 });
     94 
     95 add_task(async function test_text_input_disabled() {
     96  await test_contextmenu(
     97    "#input_disabled",
     98    [
     99      "context-undo",
    100      false,
    101      "context-redo",
    102      false,
    103      "---",
    104      null,
    105      "context-cut",
    106      false,
    107      "context-copy",
    108      false,
    109      "context-paste",
    110      null, // ignore clipboard state
    111      "context-delete",
    112      false,
    113      "context-selectall",
    114      false,
    115      "---",
    116      null,
    117      ...askChatMenu,
    118      "---",
    119      null,
    120      "spell-check-enabled",
    121      true,
    122    ],
    123    {
    124      skipFocusChange: true,
    125      awaitOnMenuBuilt: {
    126        id: "context-ask-chat",
    127      },
    128    }
    129  );
    130 });
    131 
    132 add_task(async function test_password_input() {
    133  await SpecialPowers.pushPrefEnv({
    134    set: [["signon.generation.enabled", false]],
    135  });
    136  todo(
    137    false,
    138    "context-selectall is enabled on osx-e10s, and windows when" +
    139      " it should be disabled"
    140  );
    141  await test_contextmenu(
    142    "#input_password",
    143    [
    144      "manage-saved-logins",
    145      true,
    146      "---",
    147      null,
    148      "context-undo",
    149      false,
    150      "context-redo",
    151      false,
    152      "---",
    153      null,
    154      "context-cut",
    155      false,
    156      "context-copy",
    157      false,
    158      "context-paste",
    159      null, // ignore clipboard state
    160      "context-delete",
    161      false,
    162      "context-selectall",
    163      null,
    164      "context-reveal-password",
    165      null,
    166      "---",
    167      null,
    168      ...askChatMenu,
    169    ],
    170    {
    171      skipFocusChange: true,
    172      // Need to dynamically add the "password" type or LoginManager
    173      // will think that the form inputs on the page are part of a login form
    174      // and will add fill-login context menu items. The element needs to be
    175      // re-created as type=text afterwards since it uses hasBeenTypePassword.
    176      async preCheckContextMenuFn() {
    177        await SpecialPowers.spawn(
    178          gBrowser.selectedBrowser,
    179          [],
    180          async function () {
    181            let doc = content.document;
    182            let input = doc.getElementById("input_password");
    183            input.type = "password";
    184            input.clientTop; // force layout flush
    185          }
    186        );
    187      },
    188      async postCheckContextMenuFn() {
    189        await SpecialPowers.spawn(
    190          gBrowser.selectedBrowser,
    191          [],
    192          async function () {
    193            let doc = content.document;
    194            let input = doc.getElementById("input_password");
    195            input.outerHTML = `<input id=\"input_password\">`;
    196            input.clientTop; // force layout flush
    197          }
    198        );
    199      },
    200      awaitOnMenuBuilt: {
    201        id: "context-ask-chat",
    202      },
    203    }
    204  );
    205  await SpecialPowers.popPrefEnv();
    206 });
    207 
    208 add_task(async function firefox_relay_input() {
    209  await SpecialPowers.pushPrefEnv({
    210    set: [["signon.firefoxRelay.feature", "enabled"]],
    211  });
    212 
    213  await test_contextmenu(
    214    "#input_username",
    215    [
    216      "use-relay-mask",
    217      true,
    218      "---",
    219      null,
    220      "context-undo",
    221      false,
    222      "context-redo",
    223      false,
    224      "---",
    225      null,
    226      "context-cut",
    227      false,
    228      "context-copy",
    229      false,
    230      "context-paste",
    231      null, // ignore clipboard state
    232      "context-delete",
    233      false,
    234      "context-selectall",
    235      false,
    236      "---",
    237      null,
    238      ...askChatMenu,
    239      "---",
    240      null,
    241      "spell-check-enabled",
    242      true,
    243    ],
    244    {
    245      awaitOnMenuBuilt: {
    246        id: "context-ask-chat",
    247      },
    248    }
    249  );
    250 
    251  await test_contextmenu(
    252    "#input_email",
    253    [
    254      "use-relay-mask",
    255      true,
    256      "---",
    257      null,
    258      "context-undo",
    259      false,
    260      "context-redo",
    261      false,
    262      "---",
    263      null,
    264      "context-cut",
    265      false,
    266      "context-copy",
    267      false,
    268      "context-paste",
    269      null, // ignore clipboard state
    270      "context-delete",
    271      false,
    272      "context-selectall",
    273      null,
    274      "---",
    275      null,
    276      ...askChatMenu,
    277    ],
    278    {
    279      skipFocusChange: true,
    280      awaitOnMenuBuilt: {
    281        id: "context-ask-chat",
    282      },
    283    }
    284  );
    285 
    286  await SpecialPowers.popPrefEnv();
    287 });
    288 
    289 add_task(async function test_tel_email_url_number_input() {
    290  todo(
    291    false,
    292    "context-selectall is enabled on osx-e10s, and windows when" +
    293      " it should be disabled"
    294  );
    295  for (let selector of [
    296    "#input_email",
    297    "#input_url",
    298    "#input_tel",
    299    "#input_number",
    300  ]) {
    301    await test_contextmenu(
    302      selector,
    303      [
    304        "context-undo",
    305        false,
    306        "context-redo",
    307        false,
    308        "---",
    309        null,
    310        "context-cut",
    311        false,
    312        "context-copy",
    313        false,
    314        "context-paste",
    315        null, // ignore clipboard state
    316        "context-delete",
    317        false,
    318        "context-selectall",
    319        null,
    320        "---",
    321        null,
    322        ...askChatMenu,
    323      ],
    324      {
    325        skipFocusChange: true,
    326        awaitOnMenuBuilt: {
    327          id: "context-ask-chat",
    328        },
    329      }
    330    );
    331  }
    332 });
    333 
    334 add_task(
    335  async function test_date_time_color_range_month_week_datetimelocal_input() {
    336    for (let selector of [
    337      "#input_date",
    338      "#input_time",
    339      "#input_color",
    340      "#input_range",
    341      "#input_month",
    342      "#input_week",
    343      "#input_datetime-local",
    344    ]) {
    345      await test_contextmenu(
    346        selector,
    347        [
    348          ...NAVIGATION_ITEMS,
    349          "context-savepage",
    350          true,
    351          "context-selectall",
    352          null,
    353          "---",
    354          null,
    355          "context-take-screenshot",
    356          true,
    357          "---",
    358          null,
    359          ...askChatMenu,
    360          "---",
    361          null,
    362          "context-viewsource",
    363          true,
    364        ],
    365        {
    366          skipFocusChange: true,
    367          awaitOnMenuBuilt: {
    368            id: "context-ask-chat",
    369          },
    370        }
    371      );
    372    }
    373  }
    374 );
    375 
    376 add_task(async function test_search_input() {
    377  todo(
    378    false,
    379    "context-selectall is enabled on osx-e10s, and windows when" +
    380      " it should be disabled"
    381  );
    382  await test_contextmenu(
    383    "#input_search",
    384    [
    385      "context-undo",
    386      false,
    387      "context-redo",
    388      false,
    389      "---",
    390      null,
    391      "context-cut",
    392      false,
    393      "context-copy",
    394      false,
    395      "context-paste",
    396      null, // ignore clipboard state
    397      "context-delete",
    398      false,
    399      "context-selectall",
    400      null,
    401      "---",
    402      null,
    403      ...askChatMenu,
    404      "---",
    405      null,
    406      "spell-check-enabled",
    407      true,
    408    ],
    409    {
    410      skipFocusChange: true,
    411      awaitOnMenuBuilt: {
    412        id: "context-ask-chat",
    413      },
    414    }
    415  );
    416 });
    417 
    418 add_task(async function test_text_input_readonly() {
    419  todo(
    420    false,
    421    "context-selectall is enabled on osx-e10s, and windows when" +
    422      " it should be disabled"
    423  );
    424  todo(
    425    false,
    426    "spell-check should not be enabled for input[readonly]. see bug 1246296"
    427  );
    428  await test_contextmenu(
    429    "#input_readonly",
    430    [
    431      "context-undo",
    432      false,
    433      "context-redo",
    434      false,
    435      "---",
    436      null,
    437      "context-cut",
    438      false,
    439      "context-copy",
    440      false,
    441      "context-paste",
    442      null, // ignore clipboard state
    443      "context-delete",
    444      false,
    445      "context-selectall",
    446      null,
    447      "---",
    448      null,
    449      ...askChatMenu,
    450    ],
    451    {
    452      skipFocusChange: true,
    453      awaitOnMenuBuilt: {
    454        id: "context-ask-chat",
    455      },
    456    }
    457  );
    458 });
    459 
    460 add_task(async function test_cleanup() {
    461  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    462 });