tor-browser

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

test_cut_copy_delete_command_enabled.xhtml (13391B)


      1 <?xml version="1.0"?>
      2 <?xml-stylesheet type="text/css" href="chrome://global/skin"?>
      3 <?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
      4 
      5 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
      6        title="Test for enabled state of cut/copy/delete commands">
      7  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
      8 
      9 
     10  <script type="application/javascript">
     11  <![CDATA[
     12    SimpleTest.waitForExplicitFinish();
     13    SimpleTest.waitForFocus(() => {
     14      let text = document.getElementById("textbox");
     15      let password = document.getElementById("password");
     16 
     17      let editor1 = text.editor;
     18      let editor2 = password.editor;
     19 
     20      text.focus();
     21      text.select();
     22 
     23      ok(editor1.canCopy(),
     24         "nsIEditor.canCopy() should return true in <input>");
     25      ok(editor1.canCut(),
     26         "nsIEditor.canCut() should return true in <input>");
     27      ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
     28         "cmd_copy command should be enabled in <input>");
     29      ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
     30         "cmd_cut command should be enabled in <input>");
     31      ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
     32         "cmd_delete command should be enabled in <input>");
     33 
     34      password.focus();
     35      password.select();
     36 
     37      // Copy and cut commands should be disabled on password fields.
     38      ok(!editor2.canCopy(),
     39         "nsIEditor.canCopy() should return false in <input type=password>");
     40      ok(!editor2.canCut(),
     41         "nsIEditor.canCut() should return false in <input type=password>");
     42      ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
     43         "cmd_copy command should be disabled in <input type=password>");
     44      ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
     45         "cmd_cut command should be disabled in <input type=password>");
     46      ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
     47         "cmd_delete command should be enabled in <input type=password>");
     48 
     49      // If selection is in unmasked range, allow to copy the selected
     50      // password into the clipboard.
     51      editor2.unmask(0);
     52      ok(editor2.canCopy(),
     53         "nsIEditor.canCopy() should return true in <input type=password> if the password is unmasked");
     54      ok(editor2.canCut(),
     55         "nsIEditor.canCut() should return true in <input type=password> if the password is unmasked");
     56      ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
     57         "cmd_copy command should be enabled in <input type=password> if the password is unmasked");
     58      ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
     59         "cmd_cut command should be enabled in <input type=password> if the password is unmasked");
     60      ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
     61         "cmd_delete command should be enabled in <input type=password> if the password is unmasked");
     62 
     63      // If unmasked range will be masked automatically, we shouldn't allow to
     64      // copy the selected password since the state may be changed during
     65      // showing edit menu or something.
     66      editor2.unmask(0, 13, 1000);
     67      ok(!editor2.canCopy(),
     68         "nsIEditor.canCopy() should return false in <input type=password> if the password is unmasked but will be masked automatically");
     69      ok(!editor2.canCut(),
     70         "nsIEditor.canCut() should return false in <input type=password> if the password is unmasked but will be masked automatically");
     71      ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
     72         "cmd_copy command should be disabled in <input type=password> if the password is unmasked but will be masked automatically");
     73      ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
     74         "cmd_cut command should be disabled in <input type=password> if the password is unmasked but will be masked automatically");
     75      ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
     76         "cmd_delete command should be enabled in <input type=password> if the password is unmasked but will be masked automatically");
     77 
     78      // <input type="password"> does not support setSelectionRange() oddly.
     79      function setSelectionRange(aEditor, aStart, aEnd) {
     80        let container = aEditor.rootElement.firstChild;
     81        aEditor.selection.setBaseAndExtent(container, aStart, container, aEnd);
     82      }
     83 
     84      // Check the range boundaries.
     85      editor2.unmask(3, 9);
     86      setSelectionRange(editor2, 0, 2);
     87      ok(!editor2.canCopy(),
     88         "nsIEditor.canCopy() should return false in <input type=password> (unmasked range 3-9, selected range 0-2)");
     89      ok(!editor2.canCut(),
     90         "nsIEditor.canCut() should return false in <input type=password> (unmasked range 3-9, selected range 0-2)");
     91      ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
     92         "cmd_copy command should be disabled in <input type=password> (unmasked range 3-9, selected range 0-2)");
     93      ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
     94         "cmd_cut command should be disabled in <input type=password> (unmasked range 3-9, selected range 0-2)");
     95      ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
     96         "cmd_delete command should be enabled in <input type=password> (unmasked range 3-9, selected range 0-2)");
     97 
     98      setSelectionRange(editor2, 2, 3);
     99      ok(!editor2.canCopy(),
    100         "nsIEditor.canCopy() should return false in <input type=password> (unmasked range 3-9, selected range 2-3)");
    101      ok(!editor2.canCut(),
    102         "nsIEditor.canCut() should return false in <input type=password> (unmasked range 3-9, selected range 2-3)");
    103      ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    104         "cmd_copy command should be disabled in <input type=password> (unmasked range 3-9, selected range 2-3)");
    105      ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    106         "cmd_cut command should be disabled in <input type=password> (unmasked range 3-9, selected range 2-3)");
    107      ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
    108         "cmd_delete command should be enabled in <input type=password> (unmasked range 3-9, selected range 2-3)");
    109 
    110      setSelectionRange(editor2, 2, 5);
    111      ok(!editor2.canCopy(),
    112         "nsIEditor.canCopy() should return false in <input type=password> (unmasked range 3-9, selected range 2-5)");
    113      ok(!editor2.canCut(),
    114         "nsIEditor.canCut() should return false in <input type=password> (unmasked range 3-9, selected range 2-5)");
    115      ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    116         "cmd_copy command should be disabled in <input type=password> (unmasked range 3-9, selected range 2-5)");
    117      ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    118         "cmd_cut command should be disabled in <input type=password> (unmasked range 3-9, selected range 2-5)");
    119      ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
    120         "cmd_delete command should be enabled in <input type=password> (unmasked range 3-9, selected range 2-5)");
    121 
    122      setSelectionRange(editor2, 2, 10);
    123      ok(!editor2.canCopy(),
    124         "nsIEditor.canCopy() should return false in <input type=password> (unmasked range 3-9, selected range 2-10)");
    125      ok(!editor2.canCut(),
    126         "nsIEditor.canCut() should return false in <input type=password> (unmasked range 3-9, selected range 2-10)");
    127      ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    128         "cmd_copy command should be disabled in <input type=password> (unmasked range 3-9, selected range 2-10)");
    129      ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    130         "cmd_cut command should be disabled in <input type=password> (unmasked range 3-9, selected range 2-10)");
    131      ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
    132         "cmd_delete command should be enabled in <input type=password> (unmasked range 3-9, selected range 2-10)");
    133 
    134      setSelectionRange(editor2, 2, 10);
    135      ok(!editor2.canCopy(),
    136         "nsIEditor.canCopy() should return false in <input type=password> (unmasked range 3-9, selected range 3-10)");
    137      ok(!editor2.canCut(),
    138         "nsIEditor.canCut() should return false in <input type=password> (unmasked range 3-9, selected range 3-10)");
    139      ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    140         "cmd_copy command should be disabled in <input type=password> (unmasked range 3-9, selected range 3-10)");
    141      ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    142         "cmd_cut command should be disabled in <input type=password> (unmasked range 3-9, selected range 3-10)");
    143      ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
    144         "cmd_delete command should be enabled in <input type=password> (unmasked range 3-9, selected range 3-10)");
    145 
    146      setSelectionRange(editor2, 8, 12);
    147      ok(!editor2.canCopy(),
    148         "nsIEditor.canCopy() should return false in <input type=password> (unmasked range 3-9, selected range 8-12)");
    149      ok(!editor2.canCut(),
    150         "nsIEditor.canCut() should return false in <input type=password> (unmasked range 3-9, selected range 8-12)");
    151      ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    152         "cmd_copy command should be disabled in <input type=password> (unmasked range 3-9, selected range 8-12)");
    153      ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    154         "cmd_cut command should be disabled in <input type=password> (unmasked range 3-9, selected range 8-12)");
    155      ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
    156         "cmd_delete command should be enabled in <input type=password> (unmasked range 3-9, selected range 8-12)");
    157 
    158      setSelectionRange(editor2, 9, 12);
    159      ok(!editor2.canCopy(),
    160         "nsIEditor.canCopy() should return false in <input type=password> (unmasked range 3-9, selected range 9-12)");
    161      ok(!editor2.canCut(),
    162         "nsIEditor.canCut() should return false in <input type=password> (unmasked range 3-9, selected range 9-12)");
    163      ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    164         "cmd_copy command should be disabled in <input type=password> (unmasked range 3-9, selected range 9-12)");
    165      ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    166         "cmd_cut command should be disabled in <input type=password> (unmasked range 3-9, selected range 9-12)");
    167      ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
    168         "cmd_delete command should be enabled in <input type=password> (unmasked range 3-9, selected range 9-12)");
    169 
    170      setSelectionRange(editor2, 10, 12);
    171      ok(!editor2.canCopy(),
    172         "nsIEditor.canCopy() should return false in <input type=password> (unmasked range 3-9, selected range 10-12)");
    173      ok(!editor2.canCut(),
    174         "nsIEditor.canCut() should return false in <input type=password> (unmasked range 3-9, selected range 10-12)");
    175      ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    176         "cmd_copy command should be disabled in <input type=password> (unmasked range 3-9, selected range 10-12)");
    177      ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    178         "cmd_cut command should be disabled in <input type=password> (unmasked range 3-9, selected range 10-12)");
    179      ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
    180         "cmd_delete command should be enabled in <input type=password> (unmasked range 3-9, selected range 10-12)");
    181 
    182      setSelectionRange(editor2, 3, 9);
    183      ok(editor2.canCopy(),
    184         "nsIEditor.canCopy() should return true in <input type=password> (unmasked range 3-9, selected range 3-9)");
    185      ok(editor2.canCut(),
    186         "nsIEditor.canCut() should return true in <input type=password> (unmasked range 3-9, selected range 3-9)");
    187      ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    188         "cmd_copy command should be enabled in <input type=password> (unmasked range 3-9, selected range 3-9)");
    189      ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    190         "cmd_cut command should be enabled in <input type=password> (unmasked range 3-9, selected range 3-9)");
    191      ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
    192         "cmd_delete command should be enabled in <input type=password> (unmasked range 3-9, selected range 3-9)");
    193 
    194      setSelectionRange(editor2, 4, 8);
    195      ok(editor2.canCopy(),
    196         "nsIEditor.canCopy() should return true in <input type=password> (unmasked range 3-9, selected range 4-8)");
    197      ok(editor2.canCut(),
    198         "nsIEditor.canCut() should return true in <input type=password> (unmasked range 3-9, selected range 4-8)");
    199      ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    200         "cmd_copy command should be enabled in <input type=password> (unmasked range 3-9, selected range 4-8)");
    201      ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    202         "cmd_cut command should be enabled in <input type=password> (unmasked range 3-9, selected range 4-8)");
    203      ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
    204         "cmd_delete command should be enabled in <input type=password> (unmasked range 3-9, selected range 4-8)");
    205 
    206      SimpleTest.finish();
    207    });
    208  ]]></script>
    209 
    210  <vbox flex="1">
    211    <input xmlns="http://www.w3.org/1999/xhtml" id="textbox" value="normal text"/>
    212    <input xmlns="http://www.w3.org/1999/xhtml" id="password" type="password" value="password text"/>
    213  </vbox>
    214 
    215 </window>