After bug 2022763 it doesn't need a browsing context argument. Differential Revision: https://phabricator.services.mozilla.com/D288559
82 lines
1.9 KiB
HTML
82 lines
1.9 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);
|
|
|
|
SpecialPowers.wrap(document).notifyUserGestureActivation();
|
|
input.click();
|
|
}
|
|
});
|
|
|
|
let MockFilePicker = SpecialPowers.MockFilePicker;
|
|
MockFilePicker.init();
|
|
|
|
let pickerCount = 0;
|
|
|
|
SpecialPowers.pushPrefEnv({
|
|
set: [["dom.disable_open_during_load", true]],
|
|
})
|
|
// Let's do the first click.
|
|
.then(() => {
|
|
return new Promise(resolve => {
|
|
MockFilePicker.showCallback = function(filepicker) {
|
|
++pickerCount;
|
|
resolve();
|
|
}
|
|
setTimeout(_ => {
|
|
is(pickerCount, 0, "No file picker initially");
|
|
synthesizeMouseAtCenter(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>
|