DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (5350524bb654)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
<!DOCTYPE html>
<html>
<head>
  <title>Test for secure input mode</title>
  <script type="text/javascript"
          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
  <script type="text/javascript"
          src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
  <script type="text/javascript"
          src="chrome://mochikit/content/tests/SimpleTest/NativeKeyCodes.js"></script>
  <link rel="stylesheet" type="text/css"
          href="chrome://mochikit/content/tests/SimpleTest/test.css" />
</head>
<body>
<div id="content" style="display: none">
  
</div>
<pre id="test">
</pre>

<p>
  <input id="input_text" type="text"><br>
  <input id="input_password" type="password"><br>
  <input id="input_text_readonly" type="text" readonly><br>
  <input id="input_text_ime_mode_disabled" type="text" style="ime-mode: disabled;"><br>
  <input id="input_change" type="text"><br>
  <textarea id="textarea"></textarea><br>
</p>
<div id="contenteditable" contenteditable style="min-height: 3em;"></div>

<script class="testbody" type="application/javascript">

  SimpleTest.waitForExplicitFinish();

  function sendAKeyEvent()
  {
    synthesizeNativeKey(KEYBOARD_LAYOUT_EN_US, MAC_VK_ANSI_A, {}, "a", "a");
  }

  function isFocused(aElement)
  {
    return (SpecialPowers.focusManager.focusedElement == aElement);
  }

  function runTest()
  {
    sendAKeyEvent();
    ok(true, "Not crashed: input on the document");
    $("input_text").focus();
    sendAKeyEvent();
    ok(true, "Not crashed: input on <input type=\"text\">");
    $("input_password").focus();
    sendAKeyEvent();
    ok(true, "Not crashed: input on <input type=\"password\">");
    $("input_password").blur();
    sendAKeyEvent();
    ok(true, "Not crashed: input on the document after blur() of <input type=\"password\">");
    $("input_password").focus();
    $("input_text_readonly").focus();
    sendAKeyEvent();
    ok(true, "Not crashed: input on <input type=\"text\" readonly>");
    $("input_password").focus();
    $("input_text_ime_mode_disabled").focus();
    sendAKeyEvent();
    ok(true, "Not crashed: input on <input type=\"text\" style=\"ime-mode: disabled;\">");
    $("input_password").focus();
    $("textarea").focus();
    sendAKeyEvent();
    ok(true, "Not crashed: input on <textarea>");
    $("input_password").focus();
    $("contenteditable").focus();
    sendAKeyEvent();
    ok(true, "Not crashed: input on <div contenteditable>");

    $("input_change").focus();
    $("input_change").type = "password";
    sendAKeyEvent();
    ok(true, "Not crashed: input on <input type=\"password\"> changed from type=\"text\"");
    $("input_change").type = "text";
    sendAKeyEvent();
    ok(true, "Not crashed: input on <input type=\"text\"> changed from type=\"password\"");

    otherWindow =
      window.open("data:text/html,<input id=\"text\" type\"text\"><input id=\"password\" type\"password\">",
                  "_blank", "chrome,width=100,height=100");
    ok(otherWindow, "failed to open other window");
    if (!otherWindow) {
      SimpleTest.finish();
      return;
    }

    $("input_text").focus();
    otherWindow.focus();

    SimpleTest.waitForFocus(function () {
      window.focus();
      sendAKeyEvent();
      ok(isFocused($("input_text")), "focused element isn't <input type=\"text\">");
      ok(true, "Not crashed: input on <input type=\"text\"> after the other document has focus");

      $("input_password").focus();
      otherWindow.focus();
      window.focus();
      sendAKeyEvent();
      ok(isFocused($("input_password")), "focused element isn't <input type=\"password\">");
      ok(true, "Not crashed: input on <input type=\"password\"> after the other document has focus");

      $("input_text").focus();
      otherWindow.focus();
      otherWindow.document.getElementById("text").focus();
      window.focus();
      sendAKeyEvent();
      ok(isFocused($("input_text")), "focused element isn't <input type=\"text\">");
      ok(true, "Not crashed: input on <input type=\"text\"> after the other document's <input type=\"text\"> has focus");

      $("input_password").focus();
      otherWindow.focus();
      otherWindow.document.getElementById("text").focus();
      window.focus();
      sendAKeyEvent();
      ok(isFocused($("input_password")), "focused element isn't <input type=\"password\">");
      ok(true, "Not crashed: input on <input type=\"password\"> after the other document's <input type=\"text\"> has focus");

      $("input_text").focus();
      otherWindow.focus();
      otherWindow.document.getElementById("password").focus();
      window.focus();
      sendAKeyEvent();
      ok(isFocused($("input_text")), "focused element isn't <input type=\"text\">");
      ok(true, "Not crashed: input on <input type=\"text\"> after the other document's <input type=\"password\"> has focus");

      $("input_password").focus();
      otherWindow.focus();
      otherWindow.document.getElementById("password").focus();
      window.focus();
      sendAKeyEvent();
      ok(isFocused($("input_password")), "focused element isn't <input type=\"password\">");
      ok(true, "Not crashed: input on <input type=\"password\"> after the other document's <input type=\"password\"> has focus");

      SimpleTest.finish();

    }, otherWindow);
  }

  SimpleTest.waitForFocus(runTest);
</script>
</body>
</html>