products/Sources/formale Sprachen/C/Firefox/docshell/test/mochitest/test_double_submit.html
<!doctype html >
<html >
<head >
<title >Test for Bug 1590762</title >
<script src="/tests/SimpleTest/SimpleTest.js" ></script >
<script src="/tests/SimpleTest/EventUtils.js" ></script >
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head >
<body >
<iframe name="targetFrame" id="targetFrame" ></iframe >
<form id="form" action="double_submit.sjs?delay=1000" method="POST" target="targetFrame" >
<input id="token" type="text" name="token" value="" >
<input id="button" type="submit" >
</form >
<script >
"use strict" ;
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
const CROSS_ORIGIN_URI = "http://test1.example.com/tests/docshell/test/mochitest/ping.html " ;
function asyncClick(counts) {
let frame = document.createElement('iframe' );
frame .addEventListener(
'load' , () => frame .contentWindow.postMessage({command : "start" }, "*" ),
{ once:true });
frame .src = "clicker.html" ;
addEventListener('message' , ({source }) => {
if (source === frame .contentWindow) {
counts.click++;
synthesizeMouse(document.getElementById('button' ), 5, 5, {});
}
}, { once: true });
document.body .appendChild(frame );
return stop;
}
function click(button ) {
synthesizeMouse(button , 5, 5, {});
}
add_task(async function runTest() {
let frame = document.getElementById('targetFrame' );
await new Promise(resolve => {
addEventListener('message' , resolve, {once: true});
frame .src = CROSS_ORIGIN_URI;
});
let form = document.getElementById('form' );
let button = document.getElementById('button' );
let token = document.getElementById('token' );
token.value = "first" ;
await new Promise((resolve, reject) => {
let counts = { click: 0, submit: 0 };
form .addEventListener('submit' , () => counts.submit++);
asyncClick(counts);
form .requestSubmit(button );
token.value = "bad" ;
let steps = {
good: {
entered: false,
next: () => { steps.good.entered = true; resolve(); },
assertion: () => {
ok(steps.first.entered && !steps.bad.entered, "good comes after first, but not bad" )
}
},
first: {
entered: false,
next: () => { steps.first.entered = true; token.value = "good" ; click(button ); },
assertion: () => {
ok(!steps.good.entered && !steps.bad.entered, "first message is first" )
is(counts.click, 1, "clicked" );
is(counts.submit, 2, "did submit" );
}
},
bad: {
entered: false,
next: () => { reject(); },
assertion: () => ok(false, "we got a bad message" )
}
};
addEventListener('message' , ({source , data}) => {
if (source !== frame .contentWindow) {
return;
}
let step = steps[data] || reject;
step.assertion();
step.next();
})
});
});
</script >
</body >
</html >
quality 100%
¤ Dauer der Verarbeitung: 0.27 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland