/**
* This test checks various scenarios and make sure that a file picker is being
* shown in all of them (minus a few exceptions).
* |testData| defines the tests to do and |launchNextTest| can be used to have
* specific behaviour for some tests. Everything else should just work.
*/
var MockFilePicker = SpecialPowers.MockFilePicker;
MockFilePicker.init(SpecialPowers.wrap(window).browsingContext);
// The following lists are from toolkit/content/filepicker.properties which is used by filePicker var imageExtensionList = "*.jpe; *.jpg; *.jpeg; *.gif; *.png; *.bmp; *.ico; *.svg; *.svgz; *.tif; *.tiff; *.ai; *.drw; *.pct; *.psp; *.xcf; *.psd; *.raw; *.webp; *.heic"
var currentTest = 0; var filterAllAdded; var filters; var filterIndex; var mixRefExtensionList;
// Make sure picker works with popup blocker enabled and no allowed events
SpecialPowers.pushPrefEnv({'set': [["dom.popup_allowed_events", ""]]}, runTests);
// Focusing the element will scroll them into view so making sure the clicks
// will work.
document.getElementById(testData[currentTest][0]).focus();
// Do not worry about user activation for these tests.
SpecialPowers.wrap(document).notifyUserGestureActivation();
if (testData[currentTest][0] == "untrusted-click") { var e = document.createEvent('MouseEvents');
e.initEvent('click', true, false);
document.getElementById(testData[currentTest][0]).dispatchEvent(e);
// All tests that should *NOT* show a file picker.
} else if (testData[currentTest][0] == "prevent-default" ||
testData[currentTest][0] == "prevent-default-false" ||
testData[currentTest][0] == "right-click" ||
testData[currentTest][0] == "middle-click") {
if (testData[currentTest][0] == "right-click" ||
testData[currentTest][0] == "middle-click") { var b = testData[currentTest][0] == "middle-click" ? 1 : 2;
synthesizeMouseAtCenter(document.getElementById(testData[currentTest][0]),
{ button: b });
} else {
if (testData[currentTest][0] == "prevent-default-false") {
document.getElementById(testData[currentTest][0]).onclick = function() {
return false;
};
} else {
document.getElementById(testData[currentTest][0]).onclick = function(event) {
event.preventDefault();
};
}
document.getElementById(testData[currentTest][0]).click();
}
// Wait a bit and assume we can continue. If the file picker shows later,
// behaviour is uncertain but that would be a random green, no big deal...
setTimeout(function() {
ok(true, "we should be there without a file picker being opened");
++currentTest;
launchNextTest();
}, 500);
} else if (testData[currentTest][0] == 'label-3' ||
testData[currentTest][0] == 'label-4') {
synthesizeMouse(document.getElementById(testData[currentTest][0]), 5, 5, {});
} else if (testData[currentTest][0] == 'button-click' ||
testData[currentTest][0] == 'button-down' ||
testData[currentTest][0] == 'button-up' ||
testData[currentTest][0] == 'div-click' ||
testData[currentTest][0] == 'div-click-on-demand' ||
testData[currentTest][0] == 'link-click') {
synthesizeMouseAtCenter(document.getElementById(testData[currentTest][0]), {});
} else if (testData[currentTest][0] == 'div-keydown') {
sendString("a");
} else if (testData[currentTest][0] == 'show-picker') {
document.getElementById(testData[currentTest][0]).showPicker();
} else {
document.getElementById(testData[currentTest][0]).click();
}
}
function runTests() {
MockFilePicker.appendFilterCallback = function(filepicker, title, val) {
filters.push(val);
};
MockFilePicker.appendFiltersCallback = function(filepicker, val) {
if (val === MockFilePicker.filterAll) {
filterAllAdded = true;
} else {
filters.push(val);
}
};
MockFilePicker.showCallback = function(filepicker) {
if (testData[currentTest][4]) {
ok(false, "we shouldn't have a file picker showing!");
return;
}
filterIndex = filepicker.filterIndex;
testName = testData[currentTest][0];
SimpleTest.executeSoon(function () {
ok(MockFilePicker.shown, "File picker show method should have been called (" + testName + ")");
ok(filterAllAdded, "filterAll is missing (" + testName + ")");
if (testName == "mix-ref") {
// Used only for reference for next test: nothing to be tested here
mixRefExtensionList = filters[0];
if (mixRefExtensionList == undefined) {
mixRefExtensionList = "";
}
} else {
if (testName == "mix") {
// Mixing mime type and file extension filters ("image/jpeg" and
// ".jpg" here) shouldn't restrict the list but only extend it, if file
// extension filter isn't a duplicate
ok(filters[0].includes(mixRefExtensionList), "Mixing mime types and file extension filters shouldn't restrict extension list: " +
mixRefExtensionList + " | " + filters[0]);
ok(filters[0].includes("*.jpg"), "Filter should contain '.jpg' extension. Filter was:" + filters[0]);
} else {
is(filters[0], testData[currentTest][2], "Correct filters should have been added (" + testName + ")");
is(filters.length, testData[currentTest][1], "appendFilters not called as often as expected (" + testName + ")");
}
is(filterIndex, testData[currentTest][3], "File picker should show the correct filter index (" + testName + ")");
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.