test_bug561636.html 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <!DOCTYPE HTML>
  2. <html>
  3. <!--
  4. https://bugzilla.mozilla.org/show_bug.cgi?id=561636
  5. -->
  6. <head>
  7. <title>Test for Bug 561636</title>
  8. <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  9. <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
  10. <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
  11. </head>
  12. <body>
  13. <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=561636">Mozilla Bug 561636</a>
  14. <p id="display"></p>
  15. <iframe style='width:50px; height: 50px;' name='t'></iframe>
  16. <iframe style='width:50px; height: 50px;' name='t2' id='i'></iframe>
  17. <div id="content">
  18. <form target='t' action='data:text/html,'>
  19. <input required>
  20. <input id='a' type='submit'>
  21. </form>
  22. <form target='t' action='data:text/html,'>
  23. <input type='checkbox' required>
  24. <button id='b' type='submit'></button>
  25. </form>
  26. <form target='t' action='data:text/html,'>
  27. <input id='c' required>
  28. </form>
  29. <form target='t' action='data:text/html,'>
  30. <input>
  31. <input id='s2' type='submit'>
  32. </form>
  33. <form target='t2' action='data:text/html,'>
  34. <input required>
  35. </form>
  36. </div>
  37. <pre id="test">
  38. <script type="application/javascript">
  39. /** Test for Bug 561636 **/
  40. SimpleTest.waitForExplicitFinish();
  41. addLoadEvent(runTest);
  42. function runTest()
  43. {
  44. var formSubmitted = [ false, false ];
  45. var invalidHandled = false;
  46. var os = SpecialPowers.Cc['@mozilla.org/observer-service;1']
  47. .getService(SpecialPowers.Ci.nsIObserverService);
  48. var observers = os.enumerateObservers("invalidformsubmit");
  49. // The following test should not be done if there is no observer for
  50. // "invalidformsubmit" because the form submission will not be canceled in that
  51. // case.
  52. if (!observers.hasMoreElements()) {
  53. SimpleTest.finish();
  54. return;
  55. }
  56. // Initialize
  57. document.forms[0].addEventListener('submit', function(aEvent) {
  58. aEvent.target.removeEventListener('submit', arguments.callee, false);
  59. formSubmitted[0] = true;
  60. }, false);
  61. document.forms[1].addEventListener('submit', function(aEvent) {
  62. aEvent.target.removeEventListener('submit', arguments.callee, false);
  63. formSubmitted[1] = true;
  64. }, false);
  65. document.forms[2].addEventListener('submit', function(aEvent) {
  66. aEvent.target.removeEventListener('submit', arguments.callee, false);
  67. formSubmitted[2] = true;
  68. }, false);
  69. document.forms[3].addEventListener('submit', function(aEvent) {
  70. aEvent.target.removeEventListener('submit', arguments.callee, false);
  71. formSubmitted[3] = true;
  72. ok(!formSubmitted[0], "Form 1 should not have been submitted because invalid");
  73. ok(!formSubmitted[1], "Form 2 should not have been submitted because invalid");
  74. ok(!formSubmitted[2], "Form 3 should not have been submitted because invalid");
  75. ok(formSubmitted[3], "Form 4 should have been submitted because valid");
  76. // Next test.
  77. document.forms[4].submit();
  78. }, false);
  79. document.forms[4].elements[0].addEventListener('invalid', function(aEvent) {
  80. aEvent.target.removeEventListener('invalid', arguments.callee, false);
  81. invalidHandled = true;
  82. }, false);
  83. document.getElementById('i').addEventListener('load', function(aEvent) {
  84. aEvent.target.removeEventListener('load', arguments.callee, false);
  85. SimpleTest.executeSoon(function () {
  86. ok(true, "Form 5 should have been submitted because submit() has been used even if invalid");
  87. ok(!invalidHandled, "Invalid event should not have been sent");
  88. SimpleTest.finish();
  89. });
  90. }, false);
  91. document.getElementById('a').click();
  92. document.getElementById('b').click();
  93. var c = document.getElementById('c');
  94. c.focus();
  95. synthesizeKey("KEY_Enter", { code: "Enter" });
  96. document.getElementById('s2').click();
  97. }
  98. </script>
  99. </pre>
  100. </body>
  101. </html>