<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <title>Test for html5 input types (email, tel, url, etc.)</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <script type="text/javascript" src="pwmgr_common.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
Login Manager test: html5 input types (email, tel, url, etc.)
<script>
runChecksAfterCommonInit(() => startTest());

const DEFAULT_ORIGIN = window.location.origin;

runInParent(async function setup() {
  const login1 = Cc["@mozilla.org/login-manager/loginInfo;1"].createInstance(Ci.nsILoginInfo);
  const login2 = Cc["@mozilla.org/login-manager/loginInfo;1"].createInstance(Ci.nsILoginInfo);
  const login3 = Cc["@mozilla.org/login-manager/loginInfo;1"].createInstance(Ci.nsILoginInfo);
  const login4 = Cc["@mozilla.org/login-manager/loginInfo;1"].createInstance(Ci.nsILoginInfo);
  const login5 = Cc["@mozilla.org/login-manager/loginInfo;1"].createInstance(Ci.nsILoginInfo);

  login1.init("http://mochi.test:8888", "http://bug600551-1", null,
              "testuser@example.com", "testpass1", "", "");
  login2.init("http://mochi.test:8888", "http://bug600551-2", null,
              "555-555-5555", "testpass2", "", "");
  login3.init("http://mochi.test:8888", "http://bug600551-3", null,
              "http://mozilla.org", "testpass3", "", "");
  login4.init("http://mochi.test:8888", "http://bug600551-4", null,
              "123456789", "testpass4", "", "");
  login5.init("http://mochi.test:8888", "http://bug600551-5", null,
              "test", "test", "", "");

  await Services.logins.addLogins([
    login1,
    login2,
    login3,
    login4,
    login5,
  ]);
});
</script>

<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script class="testbody" type="text/javascript">

/* Test for Login Manager: 600551
  (Password manager not working with input type=email)
 */
async function startTest() {
  const win = window.open("about:blank");
  SimpleTest.registerCleanupFunction(() => win.close());
  await loadFormIntoWindow(DEFAULT_ORIGIN, `
    <form id="form1" action="http://bug600551-1">
      <input  type="email"    name="uname">
      <input  type="password" name="pword">
      <button type="submit">Submit</button>
    </form>

    <form id="form2" action="http://bug600551-2">
      <input  type="tel"      name="uname">
      <input  type="password" name="pword">
      <button type="submit">Submit</button>
    </form>

    <form id="form3" action="http://bug600551-3">
      <input  type="url"      name="uname">
      <input  type="password" name="pword">
      <button type="submit">Submit</button>
    </form>

    <form id="form4" action="http://bug600551-4">
      <input  type="number"   name="uname">
      <input  type="password" name="pword">
      <button type="submit">Submit</button>
    </form>

    <form id="form5" action="http://bug600551-5">
      <input  type="search"   name="uname">
      <input  type="password" name="pword">
      <button type="submit">Submit</button>
      </form>

    <!-- The following forms should not be filled with usernames -->
    <form id="form6" action="formtest.js">
      <input  type="datetime" name="uname">
      <input  type="password" name="pword">
      <button type="submit">Submit</button>
    </form>

    <form id="form7" action="formtest.js">
      <input  type="date"     name="uname">
      <input  type="password" name="pword">
      <button type="submit">Submit</button>
    </form>

    <form id="form8" action="formtest.js">
      <input  type="month" name="uname">
      <input  type="password" name="pword">
      <button type="submit">Submit</button>
    </form>

    <form id="form9" action="formtest.js">
      <input  type="week"     name="uname">
      <input  type="password" name="pword">
      <button type="submit">Submit</button>
    </form>

    <form id="form10" action="formtest.js">
      <input  type="time"     name="uname">
      <input  type="password" name="pword">
      <button type="submit">Submit</button>
    </form>

    <form id="form11" action="formtest.js">
      <input  type="datetime-local" name="uname">
      <input  type="password"       name="pword">
      <button type="submit">Submit</button>
    </form>

    <form id="form12" action="formtest.js">
      <input  type="range"    name="uname">
      <input  type="password" name="pword">
      <button type="submit">Submit</button>
    </form>

    <form id="form13" action="formtest.js">
      <input  type="color"    name="uname">
      <input  type="password" name="pword">
      <button type="submit">Submit</button>
    </form>`, win, 13);

  await checkLoginFormInFrameWithElementValues(win, 1, "testuser@example.com", "testpass1");
  await checkLoginFormInFrameWithElementValues(win, 2, "555-555-5555", "testpass2");
  await checkLoginFormInFrameWithElementValues(win, 3, "http://mozilla.org", "testpass3");
  await checkLoginFormInFrameWithElementValues(win, 4, "123456789", "testpass4");
  await checkLoginFormInFrameWithElementValues(win, 5, "test", "test");

  info("type=datetime should not be considered a username");
  await checkLoginFormInFrameWithElementValues(win, 6, "");
  info("type=date should not be considered a username");
  await checkLoginFormInFrameWithElementValues(win, 7, "");
  info("type=month should not be considered a username");
  await checkLoginFormInFrameWithElementValues(win, 8, "");
  info("type=week should not be considered a username");
  await checkLoginFormInFrameWithElementValues(win, 9, "");
  info("type=time should not be considered a username");
  await checkLoginFormInFrameWithElementValues(win, 10, "");
  info("type=datetime-local should not be considered a username");
  await checkLoginFormInFrameWithElementValues(win, 11, "");
  info("type=range should not be considered a username");
  await checkLoginFormInFrameWithElementValues(win, 12, "50");
  info("type=color should not be considered a username");
  await checkLoginFormInFrameWithElementValues(win, 13, "#000000");

  SimpleTest.finish();
}
</script>
</pre>
</body>
</html>
