widget/tests/test_secure_input.html
author Mike Hommey <mh+mozilla@glandium.org>
Fri, 11 Jan 2019 16:01:15 +0000
changeset 453570 daf50f25895db073e44d50fecf2e4f6fe873865d
parent 373320 ed23f9af00002eaef7303a646a9c1067976f2340
child 459392 0e0638c8ef27dea641754aae390213e829eb71f3
permissions -rw-r--r--
Bug 1519307 - Add a new project to build useful parts of breakpad independently. r=froydnj With `ac_add_options --enable-project=tools/crashreporter` in a mozconfig, `./mach build` builds minidump_stackwalk, dump_syms and fileid. One caveat is that due to limitation in how the build system works currently, it's cumbersome to keep dump_syms as a host program for Gecko, and to make it a target program for this project. For now, keep it as a host program. We're not going to use it on automation, but it's still convenient to have for quick local builds (I've had to resort to awful hacks downstream). Differential Revision: https://phabricator.services.mozilla.com/D16299

<!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("file_secure_input.html",
                  "_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>