summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/extensions/test/xpcshell/test_trash_directory.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /toolkit/mozapps/extensions/test/xpcshell/test_trash_directory.js
parentInitial commit. (diff)
downloadthunderbird-upstream.tar.xz
thunderbird-upstream.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_trash_directory.js')
-rw-r--r--toolkit/mozapps/extensions/test/xpcshell/test_trash_directory.js47
1 files changed, 47 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_trash_directory.js b/toolkit/mozapps/extensions/test/xpcshell/test_trash_directory.js
new file mode 100644
index 0000000000..2c0540e399
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_trash_directory.js
@@ -0,0 +1,47 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+const { BasePromiseWorker } = ChromeUtils.importESModule(
+ "resource://gre/modules/PromiseWorker.sys.mjs"
+);
+
+// Test that an open file inside the trash directory does not cause
+// unrelated installs to break (see bug 1180901 for more background).
+add_task(async function test() {
+ createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
+ await promiseStartupManager();
+
+ let profileDir = PathUtils.profileDir;
+ let trashDir = PathUtils.join(profileDir, "extensions", "trash");
+ let testFile = PathUtils.join(trashDir, "test.txt");
+
+ await IOUtils.makeDirectory(trashDir);
+
+ let trashDirExists = await IOUtils.exists(trashDir);
+ ok(trashDirExists, "trash directory should have been created");
+
+ await IOUtils.writeUTF8(testFile, "");
+
+ // Use a worker to keep the testFile open.
+ const worker = new BasePromiseWorker(
+ "resource://test/data/test_trash_directory.worker.js"
+ );
+ await worker.post("open", [testFile]);
+
+ let fileExists = await IOUtils.exists(testFile);
+ ok(fileExists, "test.txt should have been created in " + trashDir);
+
+ await promiseInstallWebExtension({});
+
+ // The testFile should still exist at this point because we have not
+ // yet closed the file handle and as a result, Windows cannot remove it.
+ fileExists = await IOUtils.exists(testFile);
+ ok(fileExists, "test.txt should still exist");
+
+ // Cleanup
+ await promiseShutdownManager();
+ await worker.post("close", []);
+ await IOUtils.remove(testFile);
+ await IOUtils.remove(trashDir, { recursive: true });
+});