зеркало из https://github.com/mozilla/gecko-dev.git
75 строки
1.8 KiB
HTML
75 строки
1.8 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>Test for single filepicker per event</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>
|
|
<div id='foo'><a href='#'>Click here to test this issue</a></div>
|
|
<script>
|
|
|
|
SimpleTest.requestFlakyTimeout("Timeouts are needed to simulate user-interaction");
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
let clickCount = 0;
|
|
let foo = document.getElementById('foo');
|
|
foo.addEventListener('click', _ => {
|
|
if (++clickCount < 10) {
|
|
let input = document.createElement('input');
|
|
input.type = 'file';
|
|
foo.appendChild(input);
|
|
input.click();
|
|
}
|
|
});
|
|
|
|
let MockFilePicker = SpecialPowers.MockFilePicker;
|
|
MockFilePicker.init(window);
|
|
|
|
let pickerCount = 0;
|
|
|
|
// Let's do the first click.
|
|
(new Promise(resolve => {
|
|
MockFilePicker.showCallback = function(filepicker) {
|
|
++pickerCount;
|
|
resolve();
|
|
}
|
|
setTimeout(_ => {
|
|
is(pickerCount, 0, "No file picker initially");
|
|
sendMouseEvent({type:'click'}, 'foo');
|
|
}, 0);
|
|
}))
|
|
|
|
// Let's wait a bit more, then let's do a click.
|
|
.then(() => {
|
|
return new Promise(resolve => {
|
|
MockFilePicker.showCallback = function(filepicker) {
|
|
++pickerCount;
|
|
resolve();
|
|
}
|
|
|
|
setTimeout(() => {
|
|
is(pickerCount, 1, "Only 1 file picker");
|
|
is(clickCount, 10, "10 clicks triggered");
|
|
clickCount = 0;
|
|
pickerCount = 0;
|
|
synthesizeMouseAtCenter(foo, {});
|
|
}, 1000);
|
|
});
|
|
})
|
|
|
|
// Another click...
|
|
.then(_ => {
|
|
setTimeout(() => {
|
|
is(pickerCount, 1, "Only 1 file picker");
|
|
is(clickCount, 10, "10 clicks triggered");
|
|
MockFilePicker.cleanup();
|
|
SimpleTest.finish();
|
|
}, 1000);
|
|
});
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|