diff options
Diffstat (limited to '')
-rw-r--r-- | dom/html/test/test_multipleFilePicker.html | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/dom/html/test/test_multipleFilePicker.html b/dom/html/test/test_multipleFilePicker.html new file mode 100644 index 0000000000..c4a71151aa --- /dev/null +++ b/dom/html/test/test_multipleFilePicker.html @@ -0,0 +1,79 @@ +<!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; + +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> |