no bug - Bumping Firefox l10n changesets r=release a=l10n-bump DONTBUILD CLOSED TREE
[gecko.git] / docshell / test / mochitest / test_double_submit.html
blob640930718de7b1bde1bc085c649dcf009b02e025
1 <!doctype html>
2 <html>
3 <head>
4 <title>Test for Bug 1590762</title>
5 <script src="/tests/SimpleTest/SimpleTest.js"></script>
6 <script src="/tests/SimpleTest/EventUtils.js"></script>
7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
8 </head>
9 <body>
10 <iframe name="targetFrame" id="targetFrame"></iframe>
11 <form id="form" action="double_submit.sjs?delay=1000" method="POST" target="targetFrame">
12 <input id="token" type="text" name="token" value="">
13 <input id="button" type="submit">
14 </form>
15 <script>
16 "use strict";
18 // eslint-disable-next-line @microsoft/sdl/no-insecure-url
19 const CROSS_ORIGIN_URI = "http://test1.example.com/tests/docshell/test/mochitest/ping.html";
21 function asyncClick(counts) {
22 let frame = document.createElement('iframe');
23 frame.addEventListener(
24 'load', () => frame.contentWindow.postMessage({command: "start"}, "*"),
25 { once:true });
26 frame.src = "clicker.html";
28 addEventListener('message', ({source}) => {
29 if (source === frame.contentWindow) {
30 counts.click++;
31 synthesizeMouse(document.getElementById('button'), 5, 5, {});
33 }, { once: true });
35 document.body.appendChild(frame);
36 return stop;
39 function click(button) {
40 synthesizeMouse(button, 5, 5, {});
43 add_task(async function runTest() {
44 let frame = document.getElementById('targetFrame');
45 await new Promise(resolve => {
46 addEventListener('message', resolve, {once: true});
47 frame.src = CROSS_ORIGIN_URI;
48 });
50 let form = document.getElementById('form');
51 let button = document.getElementById('button');
53 let token = document.getElementById('token');
54 token.value = "first";
56 await new Promise((resolve, reject) => {
57 let counts = { click: 0, submit: 0 };
58 form.addEventListener('submit', () => counts.submit++);
59 asyncClick(counts);
60 form.requestSubmit(button);
61 token.value = "bad";
62 let steps = {
63 good: {
64 entered: false,
65 next: () => { steps.good.entered = true; resolve(); },
66 assertion: () => {
67 ok(steps.first.entered && !steps.bad.entered, "good comes after first, but not bad")
70 first: {
71 entered: false,
72 next: () => { steps.first.entered = true; token.value = "good"; click(button); },
73 assertion: () => {
74 ok(!steps.good.entered && !steps.bad.entered, "first message is first")
75 is(counts.click, 1, "clicked");
76 is(counts.submit, 2, "did submit");
79 bad: {
80 entered: false,
81 next: () => { reject(); },
82 assertion: () => ok(false, "we got a bad message")
85 addEventListener('message', ({source, data}) => {
86 if (source !== frame.contentWindow) {
87 return;
90 let step = steps[data] || reject;
91 step.assertion();
92 step.next();
94 });
95 });
96 </script>
97 </body>
98 </html>