summaryrefslogtreecommitdiffstats
path: root/browser/components/downloads/test/browser/browser_tempfilename.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/downloads/test/browser/browser_tempfilename.js')
-rw-r--r--browser/components/downloads/test/browser/browser_tempfilename.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/browser/components/downloads/test/browser/browser_tempfilename.js b/browser/components/downloads/test/browser/browser_tempfilename.js
new file mode 100644
index 0000000000..e4dae6d944
--- /dev/null
+++ b/browser/components/downloads/test/browser/browser_tempfilename.js
@@ -0,0 +1,88 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+add_task(async function test_tempfilename() {
+ startServer();
+ let downloadURL = httpUrl("interruptible.txt");
+ let list = await Downloads.getList(Downloads.PUBLIC);
+ let downloadStarted = new Promise(resolve => {
+ let view = {
+ onDownloadAdded(download) {
+ list.removeView(view);
+ resolve(download);
+ },
+ };
+ list.addView(view);
+ });
+
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.download.always_ask_before_handling_new_types", false]],
+ });
+
+ const MimeSvc = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService);
+ const HandlerSvc = Cc["@mozilla.org/uriloader/handler-service;1"].getService(
+ Ci.nsIHandlerService
+ );
+ let mimeInfo = MimeSvc.getFromTypeAndExtension(
+ HandlerSvc.getTypeFromExtension("txt"),
+ "txt"
+ );
+ let existed = HandlerSvc.exists(mimeInfo);
+ mimeInfo.alwaysAskBeforeHandling = false;
+ mimeInfo.preferredAction = Ci.nsIHandlerInfo.saveToDisk;
+ HandlerSvc.store(mimeInfo);
+
+ serveInterruptibleAsDownload();
+ mustInterruptResponses();
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ url: downloadURL,
+ waitForLoad: false,
+ waitForStop: true,
+ },
+ async () => {
+ let download = await downloadStarted;
+ registerCleanupFunction(async () => {
+ if (existed) {
+ HandlerSvc.store(mimeInfo);
+ } else {
+ HandlerSvc.remove(mimeInfo);
+ }
+ await download.finalize(true);
+ 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);
+ await download.finalize();
+ await list.removeFinished();
+ });
+
+ let { partFilePath } = download.target;
+ Assert.stringContains(
+ partFilePath,
+ "interruptible",
+ "Should keep bit of original filename."
+ );
+ isnot(
+ PathUtils.filename(partFilePath),
+ "interruptible.txt.part",
+ "Should not just have original filename."
+ );
+ ok(
+ partFilePath.endsWith(".txt.part"),
+ `${PathUtils.filename(partFilePath)} should end with .txt.part`
+ );
+ let promiseFinished = download.whenSucceeded();
+ continueResponses();
+ await promiseFinished;
+ ok(
+ !(await IOUtils.exists(download.target.partFilePath)),
+ "Temp file should be gone."
+ );
+ }
+ );
+});