diff options
Diffstat (limited to '')
-rw-r--r-- | toolkit/mozapps/extensions/test/xpcshell/test_trash_directory.js | 47 |
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 }); +}); |