98 lines
3.3 KiB
HTML
98 lines
3.3 KiB
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>
|