Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";
async function testAppliedFilters(ext, expectedFilter, expectedFilterCount) {
let tempDir = FileUtils.getDir("TmpD", [`testDownloadDir-${Math.random()}`]);
tempDir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
let filterCount = 0;
let MockFilePicker = SpecialPowers.MockFilePicker;
MockFilePicker.init(window.browsingContext);
MockFilePicker.displayDirectory = tempDir;
MockFilePicker.returnValue = MockFilePicker.returnCancel;
MockFilePicker.appendFiltersCallback = function (fp, val) {
const hexstr = "0x" + ("000" + val.toString(16)).substr(-3);
filterCount++;
if (filterCount < expectedFilterCount) {
is(val, expectedFilter, "Got expected filter: " + hexstr);
} else if (filterCount == expectedFilterCount) {
is(val, MockFilePicker.filterAll, "Got all files filter: " + hexstr);
} else {
is(val, null, "Got unexpected filter: " + hexstr);
}
};
MockFilePicker.showCallback = function (fp) {
const filename = fp.defaultString;
info("MockFilePicker - save as: " + filename);
};
let manifest = {
description: ext,
permissions: ["downloads"],
};
const extension = ExtensionTestUtils.loadExtension({
manifest: manifest,
background: async function () {
let ext = chrome.runtime.getManifest().description;
await browser.test.assertRejects(
browser.downloads.download({
filename: "any-file" + ext,
saveAs: true,
}),
"Download canceled by the user",
"expected request to be canceled"
);
browser.test.sendMessage("canceled");
},
});
await extension.startup();
await extension.awaitMessage("canceled");
await extension.unload();
is(
filterCount,
expectedFilterCount,
"Got correct number of filters: " + filterCount
);
MockFilePicker.cleanup();
tempDir.remove(true);
}
// Missing extension
add_task(async function testDownload_missing_All() {
await testAppliedFilters("", null, 1);
});
// Unrecognized extension
add_task(async function testDownload_unrecognized_All() {
await testAppliedFilters(".xxx", null, 1);
});
// Recognized extensions
add_task(async function testDownload_html_HTML() {
await testAppliedFilters(".html", Ci.nsIFilePicker.filterHTML, 2);
});
add_task(async function testDownload_xhtml_HTML() {
await testAppliedFilters(".xhtml", Ci.nsIFilePicker.filterHTML, 2);
});
add_task(async function testDownload_txt_Text() {
await testAppliedFilters(".txt", Ci.nsIFilePicker.filterText, 2);
});
add_task(async function testDownload_text_Text() {
await testAppliedFilters(".text", Ci.nsIFilePicker.filterText, 2);
});
add_task(async function testDownload_jpe_Images() {
await testAppliedFilters(".jpe", Ci.nsIFilePicker.filterImages, 2);
});
add_task(async function testDownload_tif_Images() {
await testAppliedFilters(".tif", Ci.nsIFilePicker.filterImages, 2);
});
add_task(async function testDownload_webp_Images() {
await testAppliedFilters(".webp", Ci.nsIFilePicker.filterImages, 2);
});
add_task(async function testDownload_heic_Images() {
await testAppliedFilters(".heic", Ci.nsIFilePicker.filterImages, 2);
});
add_task(async function testDownload_xml_XML() {
await testAppliedFilters(".xml", Ci.nsIFilePicker.filterXML, 2);
});
add_task(async function testDownload_aac_Audio() {
await testAppliedFilters(".aac", Ci.nsIFilePicker.filterAudio, 2);
});
add_task(async function testDownload_mp3_Audio() {
await testAppliedFilters(".mp3", Ci.nsIFilePicker.filterAudio, 2);
});
add_task(async function testDownload_wma_Audio() {
await testAppliedFilters(".wma", Ci.nsIFilePicker.filterAudio, 2);
});
add_task(async function testDownload_avi_Video() {
await testAppliedFilters(".avi", Ci.nsIFilePicker.filterVideo, 2);
});
add_task(async function testDownload_mp4_Video() {
await testAppliedFilters(".mp4", Ci.nsIFilePicker.filterVideo, 2);
});
add_task(async function testDownload_xvid_Video() {
await testAppliedFilters(".xvid", Ci.nsIFilePicker.filterVideo, 2);
});