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.html (11900B)


      1 <!DOCTYPE HTML>
      2 <!-- This Source Code Form is subject to the terms of the Mozilla Public
      3   - License, v. 2.0. If a copy of the MPL was not distributed with this
      4   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
      5 <html>
      6 <!--
      7 https://bugzilla.mozilla.org/show_bug.cgi?id=1067255
      8 -->
      9 
     10 <head>
     11  <title>Test for enabled state of cut/copy/delete commands</title>
     12  <script src="/tests/SimpleTest/SimpleTest.js"></script>
     13  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
     14  <script src="/tests/SimpleTest/EventUtils.js"></script>
     15 </head>
     16 
     17 <body onload="doTest();">
     18  <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1067255">Mozilla Bug 1067255</a>
     19 
     20  <pre id="test">
     21    <script type="application/javascript">
     22      /** Test for Bug 1067255 */
     23      SimpleTest.waitForExplicitFinish();
     24 
     25      function doTest() {
     26        var text = $("text-field");
     27        var textWithHandlers = $("text-field-2");
     28        var password = $("password-field");
     29        var passwordWithHandlers = $("password-field-2");
     30        var textWithParentHandlers = $("text-field-3");
     31        var passwordWithParentHandlers = $("password-field-3");
     32        var textarea1 = $("text-area-1");
     33        var textarea2 = $("text-area-2");
     34        var textarea3 = $("text-area-3");
     35 
     36        var editor1 = SpecialPowers.wrap(text).editor;
     37        var editor2 = SpecialPowers.wrap(password).editor;
     38        var editor3 = SpecialPowers.wrap(textWithHandlers).editor;
     39        var editor4 = SpecialPowers.wrap(passwordWithHandlers).editor;
     40        var editor5 = SpecialPowers.wrap(textWithParentHandlers).editor;
     41        var editor6 = SpecialPowers.wrap(passwordWithParentHandlers).editor;
     42        var editor7 = SpecialPowers.wrap(textarea1).editor;
     43        var editor8 = SpecialPowers.wrap(textarea2).editor;
     44        var editor9 = SpecialPowers.wrap(textarea3).editor;
     45 
     46        text.focus();
     47 
     48        ok(!editor1.canCopy(),
     49           "nsIEditor.canCopy() should return false in <input type=text> with no selection");
     50        ok(!editor1.canCut(),
     51           "nsIEditor.canCut() should return false in <input type=text> with no selection");
     52        ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
     53           "cmd_copy command should be disabled in <input type=text> with no selection");
     54        ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
     55           "cmd_cut command should be disabled in <input type=text> with no selection");
     56        ok(!SpecialPowers.isCommandEnabled(window, "cmd_delete"),
     57           "cmd_delete command should be disabled in <input type=text> with no selection");
     58 
     59        text.select();
     60 
     61        ok(editor1.canCopy(),
     62           "nsIEditor.canCopy() should return true in <input type=text> with selection");
     63        ok(editor1.canCut(),
     64           "nsIEditor.canCut() should return true in <input type=text> with selection");
     65        ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
     66           "cmd_copy command should be enabled in <input type=text> with selection");
     67        ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
     68           "cmd_cut command should be enabled in <input type=text> with selection");
     69        ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
     70           "cmd_delete command should be enabled in <input type=text> with selection");
     71 
     72        password.focus();
     73 
     74        ok(!editor2.canCopy(),
     75           "nsIEditor.canCopy() should return false in <input type=password> with no selection");
     76        ok(!editor2.canCut(),
     77           "nsIEditor.canCut() should return false in <input type=password> with no selection");
     78        ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
     79           "cmd_copy command should be disabled in <input type=password> with no selection");
     80        ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
     81           "cmd_cut command should be disabled in <input type=password> with no selection");
     82        ok(!SpecialPowers.isCommandEnabled(window, "cmd_delete"),
     83           "cmd_delete command should be disabled in <input type=password> with no selection");
     84 
     85        // Copy and cut commands don't do anything on password fields by default,
     86        // so they remain disabled even when there is a selection...
     87        password.select();
     88 
     89        ok(!editor2.canCopy(),
     90           "nsIEditor.canCopy() should return false in <input type=password> with selection");
     91        ok(!editor2.canCut(),
     92           "nsIEditor.canCut() should return false in <input type=password> with selection");
     93        ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
     94           "cmd_copy command should be disabled in <input type=password> with selection");
     95        ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
     96           "cmd_cut command should be disabled in <input type=password> with selection");
     97        // Delete, on the other hand, does apply to password fields.
     98        ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
     99           "cmd_delete command should be enabled in <input type=password with selection>");
    100 
    101        // ...but webpages can hook up event handlers to cut/copy events, so we have to
    102        // keep the cut and copy commands enabled if event handlers are attached,
    103        // for both regular edit fields and password fields (even when there's no
    104        // selection, as we don't know what the handler might want to do).
    105        textWithHandlers.focus();
    106 
    107        ok(editor3.canCopy(),
    108           "nsIEditor.canCopy() should return true in <input type=text> with event handler");
    109        ok(editor3.canCut(),
    110           "nsIEditor.canCut() should return true in <input type=text> with event handler");
    111        ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    112           "cmd_copy command should be enabled in <input type=text> with event handler");
    113        ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    114           "cmd_cut command should be enabled in <input type=text> with event handler");
    115 
    116        passwordWithHandlers.focus();
    117 
    118        ok(editor4.canCopy(),
    119           "nsIEditor.canCopy() should return true in <input type=password> with event handler");
    120        ok(editor4.canCut(),
    121           "nsIEditor.canCut() should return true in <input type=password> with event handler");
    122        ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    123           "cmd_copy command should be enabled in <input type=password> with event handler");
    124        ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    125           "cmd_cut command should be enabled in <input type=password> with event handler");
    126 
    127        // Also check that the commands are enabled if there's a handler on a parent element.
    128        textWithParentHandlers.focus();
    129 
    130        ok(editor5.canCopy(),
    131           "nsIEditor.canCopy() should return true in <input type=text> with event handler on an ancestor");
    132        ok(editor5.canCut(),
    133           "nsIEditor.canCut() should return true in <input type=text> with event handler on an ancestor");
    134        ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    135           "cmd_copy command should be enabled in <input type=text> with event handler on an ancestor");
    136        ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    137           "cmd_cut command should be enabled in <input type=text> with event handler on an ancestor");
    138 
    139        passwordWithParentHandlers.focus();
    140 
    141        ok(editor6.canCopy(),
    142           "nsIEditor.canCopy() should return true in <input type=password> with event handler on an ancestor");
    143        ok(editor6.canCut(),
    144           "nsIEditor.canCut() should return true in <input type=password> with event handler on an ancestor");
    145        ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    146           "cmd_copy command should be enabled in <input type=password> with event handler on an ancestor");
    147        ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    148           "cmd_cut command should be enabled in <input type=password> with event handler on an ancestor");
    149 
    150        // TEXTAREA tests
    151 
    152        textarea1.focus();
    153 
    154        ok(!editor7.canCopy(),
    155           "nsIEditor.canCopy() should return false in <textarea> with no selection");
    156        ok(!editor7.canCut(),
    157           "nsIEditor.canCut() should return false in <textarea> with no selection");
    158        ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    159           "cmd_copy command should be disabled in <textarea> with no selection");
    160        ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    161           "cmd_cut command should be disabled in <textarea> with no selection");
    162        ok(!SpecialPowers.isCommandEnabled(window, "cmd_delete"),
    163           "cmd_delete command should be disabled in <textarea> with no selection");
    164 
    165        textarea1.select();
    166 
    167        ok(editor7.canCopy(),
    168           "nsIEditor.canCopy() should return true in <textarea> with selection");
    169        ok(editor7.canCut(),
    170           "nsIEditor.canCut() should return true in <textarea> with selection");
    171        ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    172           "cmd_copy command should be enabled in <textarea> with selection");
    173        ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    174           "cmd_cut command should be enabled in <textarea> with selection");
    175        ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
    176           "cmd_delete command should be enabled in <textarea> with selection");
    177 
    178        textarea2.focus();
    179 
    180        ok(!editor8.canCopy(),
    181           "nsIEditor.canCopy() should return false in <textarea> with only a 'cut' handler");
    182        ok(editor8.canCut(),
    183           "nsIEditor.canCut() should return true in <textarea> with only a 'cut' handler");
    184        ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    185           "cmd_copy command should be disabled in <textarea> with only a 'cut' handler");
    186        ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    187           "cmd_cut command should be enabled in <textarea> with only a 'cut' handler");
    188        ok(!SpecialPowers.isCommandEnabled(window, "cmd_delete"),
    189           "cmd_delete command should be disabled in <textarea> with only a 'cut' handler");
    190 
    191        textarea3.focus();
    192 
    193        ok(editor9.canCopy(),
    194           "nsIEditor.canCopy() should return true in <textarea> with only a 'copy' handler on ancestor");
    195        ok(!editor9.canCut(),
    196           "nsIEditor.canCut() should return false in <textarea> with only a 'copy' handler on ancestor");
    197        ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
    198           "cmd_copy command should be enabled in <textarea> with only a 'copy' handler on ancestor");
    199        ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
    200           "cmd_cut command should be disabled in <textarea> with only a 'copy' handler on ancestor");
    201        ok(!SpecialPowers.isCommandEnabled(window, "cmd_delete"),
    202           "cmd_delete command should be disabled in <textarea> with only a 'copy' handler on ancestor");
    203 
    204        SimpleTest.finish();
    205      }
    206   </script>
    207  </pre>
    208 
    209  <input type="text" value="Gonzo says hi" id="text-field" />
    210  <input type="password" value="Jan also" id="password-field" />
    211  <input type="text" value="Hi says Gonzo" id="text-field-2" oncut="cut()" oncopy="copy()" ondelete="delete()"/>
    212  <input type="password" value="Also Jan" id="password-field-2" oncut="cut()" oncopy="copy()" ondelete="delete()"/>
    213  <div oncut="cut()">
    214    <ul oncopy="copy()">
    215      <li><input type="text" value="Hi again" id="text-field-3"/></li>
    216      <li><input type="password" value="And again, hi" id="password-field-3"/></li>
    217    </ul>
    218  </div>
    219  <textarea id="text-area-1">textarea</textarea>
    220  <textarea oncut="cut()" id="text-area-2">textarea with cut handler</textarea>
    221  <div oncopy="copy()">
    222    <blockquote>
    223      <p><textarea id="text-area-3">textarea with copy handler on parent</textarea></p>
    224    </blockquote>
    225  </div>
    226 </body>
    227 </html>