<!DOCTYPE HTML> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=566160 --> <head> <title>Test for Bug 566160</title> <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> </head> <body> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=566160">Mozilla Bug 566160</a> <p id="display"></p> <style> iframe { width: 130px; height: 100px;} </style> <iframe name='frame1' id='frame1'></iframe> <iframe name='frame2' id='frame2'></iframe> <iframe name='frame3' id='frame3'></iframe> <iframe name='frame3bis' id='frame3bis'></iframe> <iframe name='frame4' id='frame4'></iframe> <iframe name='frame5' id='frame5'></iframe> <iframe name='frame6' id='frame6'></iframe> <iframe name='frame7' id='frame7'></iframe> <iframe name='frame8' id='frame8'></iframe> <iframe name='frame9' id='frame9'></iframe> <div id="content"> <!-- submit controls with formaction that are validated with a CLICK --> <form target="frame1" action="data:text/html," method="POST"> <input name='foo' value='foo'> <input type='submit' id='is' formmethod="GET"> </form> <form target="frame2" action="data:text/html," method="POST"> <input name='bar' value='bar'> <input type='image' id='ii' formmethod="GET"> </form> <form target="frame3" action="data:text/html," method="POST"> <input name='tulip' value='tulip'> <button type='submit' id='bs' formmethod="GET">submit</button> </form> <form target="frame3bis" action="data:text/html," method="POST"> <input name='tulipbis' value='tulipbis'> <button type='submit' id='bsbis' formmethod="GET">submit</button> </form> <!-- submit controls with formaction that are validated with ENTER --> <form target="frame4" action="data:text/html," method="POST"> <input name='footulip' value='footulip'> <input type='submit' id='is2' formmethod="GET"> </form> <form target="frame5" action="data:text/html," method="POST"> <input name='foobar' value='foobar'> <input type='image' id='ii2' formmethod="GET"> </form> <form target="frame6" action="data:text/html," method="POST"> <input name='tulip2' value='tulip2'> <button type='submit' id='bs2' formmethod="GET">submit</button> </form> <!-- check that when submitting a from from an element which is not a submit control, @formaction isn't used --> <form target='frame7' action="data:text/html," method="GET"> <input id='enter' name='input' value='enter' formmethod="POST"> </form> <!-- If formmethod isn't set, it's default value shouldn't be used --> <form target="frame8" action="data:text/html," method="POST"> <input name='tulip8' value='tulip8'> <input type='submit' id='i8'> </form> <!-- If formmethod is set but has an invalid value, the default value should be used. --> <form target="frame9" action="data:text/html," method="POST"> <input name='tulip9' value='tulip9'> <input type='submit' id='i9' formmethod=""> </form> </div> <pre id="test"> <script type="application/javascript"> /** Test for Bug 566160 **/ SimpleTest.waitForExplicitFinish(); addLoadEvent(function() { setTimeout(runTests, 0); }); var gTestResults = { frame1: "data:text/html,?foo=foo", frame2: "data:text/html,?bar=bar&x=0&y=0", frame3: "data:text/html,?tulip=tulip", frame3bis: "data:text/html,?tulipbis=tulipbis", frame4: "data:text/html,?footulip=footulip", frame5: "data:text/html,?foobar=foobar&x=0&y=0", frame6: "data:text/html,?tulip2=tulip2", frame7: "data:text/html,?input=enter", frame8: "data:text/html,", frame9: "data:text/html,?tulip9=tulip9", }; var gPendingLoad = 0; // Has to be set after depending on the frames number. function runTests() { // We add a load event for the frames which will be called when the forms // will be submitted. var frames = [ document.getElementById('frame1'), document.getElementById('frame2'), document.getElementById('frame3'), document.getElementById('frame3bis'), document.getElementById('frame4'), document.getElementById('frame5'), document.getElementById('frame6'), document.getElementById('frame7'), document.getElementById('frame8'), document.getElementById('frame9'), ]; gPendingLoad = frames.length; for (var i=0; i<frames.length; i++) { frames[i].setAttribute('onload', "frameLoaded(this);"); } /** * We are going to focus each element before interacting with either for * simulating the ENTER key (synthesizeKey) or a click (synthesizeMouse) or * using .click(). This because it may be needed (ENTER) and because we want * to have the element visible in the iframe. * * Focusing the first element (id='is') is launching the tests. */ document.getElementById('is').addEventListener('focus', function(aEvent) { aEvent.target.removeEventListener('focus', arguments.callee, false); synthesizeMouse(document.getElementById('is'), 5, 5, {}); document.getElementById('ii').focus(); }, false); document.getElementById('ii').addEventListener('focus', function(aEvent) { aEvent.target.removeEventListener('focus', arguments.callee, false); synthesizeMouse(document.getElementById('ii'), 5, 5, {}); document.getElementById('bs').focus(); }, false); document.getElementById('bs').addEventListener('focus', function(aEvent) { aEvent.target.removeEventListener('focus', arguments.callee, false); synthesizeMouse(document.getElementById('bs'), 5, 5, {}); document.getElementById('bsbis').focus(); }, false); document.getElementById('bsbis').addEventListener('focus', function(aEvent) { aEvent.target.removeEventListener('focus', arguments.callee, false); document.getElementById('bsbis').click(); document.getElementById('is2').focus(); }, false); document.getElementById('is2').addEventListener('focus', function(aEvent) { aEvent.target.removeEventListener('focus', arguments.callee, false); synthesizeKey("VK_RETURN", {}); document.getElementById('ii2').focus(); }, false); document.getElementById('ii2').addEventListener('focus', function(aEvent) { aEvent.target.removeEventListener('focus', arguments.callee, false); synthesizeKey("VK_RETURN", {}); document.getElementById('bs2').focus(); }, false); document.getElementById('bs2').addEventListener('focus', function(aEvent) { aEvent.target.removeEventListener('focus', arguments.callee, false); synthesizeKey("VK_RETURN", {}); document.getElementById('enter').focus(); }, false); document.getElementById('enter').addEventListener('focus', function(aEvent) { aEvent.target.removeEventListener('focus', arguments.callee, false); synthesizeKey("VK_RETURN", {}); document.getElementById('i8').focus(); }, false); document.getElementById('i8').addEventListener('focus', function(aEvent) { aEvent.target.removeEventListener('focus', arguments.callee, false); synthesizeKey("VK_RETURN", {}); document.getElementById('i9').focus(); }, false); document.getElementById('i9').addEventListener('focus', function(aEvent) { aEvent.target.removeEventListener('focus', arguments.callee, false); synthesizeKey("VK_RETURN", {}); }, false); document.getElementById('is').focus(); } function frameLoaded(aFrame) { // Check if formaction/action has the correct behavior. is(aFrame.contentWindow.location.href, gTestResults[aFrame.name], "the method/formmethod attribute doesn't have the correct behavior"); if (--gPendingLoad == 0) { SimpleTest.finish(); } } </script> </pre> </body> </html>