Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
"use strict";
// Create a uri for an https site
const testPath = getRootDirectory(gTestPath).replace(
);
const TEST_URI = testPath + "file_nohttps_download.html";
const EXPECTED_DOWNLOAD_URL =
"example.com/browser/dom/security/test/https-first/file_nohttps_download.sjs";
function promisePanelOpened() {
if (DownloadsPanel.panel && DownloadsPanel.panel.state == "open") {
return Promise.resolve();
}
return BrowserTestUtils.waitForEvent(DownloadsPanel.panel, "popupshown");
}
// Test description:
// 2. Start download - location of download is http
// 3. https-first upgrades to https
// 4. https returns 404 => downgrade to http again
// 5. Complete download of text file
add_task(async function test_nohttps_download() {
await SpecialPowers.pushPrefEnv({
set: [["dom.security.https_first", true]],
});
// remove all previous downloads
let downloadsList = await Downloads.getList(Downloads.PUBLIC);
await downloadsList.removeFinished();
let downloadsPanelPromise = promisePanelOpened();
let downloadsPromise = Downloads.getList(Downloads.PUBLIC);
BrowserTestUtils.startLoadingURIString(gBrowser, TEST_URI);
// wait for downloadsPanel to open before continuing with test
await downloadsPanelPromise;
let downloadList = await downloadsPromise;
is(DownloadsPanel.isPanelShowing, true, "DownloadsPanel should be open.");
is(downloadList._downloads.length, 1, "Entry should be in downloads list.");
let [download] = downloadList._downloads;
// wait for download to finish (with success or error)
await download.unblock();
await download.start();
is(download.contentType, "text/plain", "File contentType should be correct.");
// ensure https-first did upgrade the scheme.
is(
download.source.url,
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
"http://" + EXPECTED_DOWNLOAD_URL,
"Scheme should be http."
);
// ensure that downloaded is complete
is(download.target.size, 15, "Download size is correct");
//clean up
info("cleaning up downloads");
try {
if (Services.appinfo.OS === "WINNT") {
// We need to make the file writable to delete it on Windows.
await IOUtils.setPermissions(download.target.path, 0o600);
}
await IOUtils.remove(download.target.path);
} catch (error) {
info("The file " + download.target.path + " is not removed, " + error);
}
await downloadList.remove(download);
await download.finalize();
});