Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/**
* Tests how the browser remembers the last download folder
* from download to download, with a particular emphasis
* on how it behaves when private browsing windows open.
*/
add_task(async function test_downloads_last_dir_toggle() {
let tmpDir = FileUtils.getDir("TmpD", []);
let dir1 = newDirectory();
registerCleanupFunction(function () {
Services.prefs.clearUserPref("browser.download.lastDir");
dir1.remove(true);
});
let win = await BrowserTestUtils.openNewBrowserWindow();
let gDownloadLastDir = new DownloadLastDir(win);
is(
typeof gDownloadLastDir,
"object",
"gDownloadLastDir should be a valid object"
);
is(
gDownloadLastDir.file,
null,
"gDownloadLastDir.file should be null to start with"
);
gDownloadLastDir.file = tmpDir;
is(
gDownloadLastDir.file.path,
tmpDir.path,
"LastDir should point to the temporary directory"
);
isnot(
gDownloadLastDir.file,
tmpDir,
"gDownloadLastDir.file should not be pointing to the tmpDir"
);
gDownloadLastDir.file = 1; // not an nsIFile
is(gDownloadLastDir.file, null, "gDownloadLastDir.file should be null");
gDownloadLastDir.file = tmpDir;
clearHistory();
is(gDownloadLastDir.file, null, "gDownloadLastDir.file should be null");
gDownloadLastDir.file = tmpDir;
await BrowserTestUtils.closeWindow(win);
info("Opening the first private window");
await testHelper({ private: true, expectedDir: tmpDir });
info("Opening a non-private window");
await testHelper({ private: false, expectedDir: tmpDir });
info("Opening a private window and setting download directory");
await testHelper({ private: true, setDir: dir1, expectedDir: dir1 });
info("Opening a non-private window and checking download directory");
await testHelper({ private: false, expectedDir: tmpDir });
info("Opening private window and clearing history");
await testHelper({ private: true, clearHistory: true, expectedDir: null });
info("Opening a non-private window and checking download directory");
await testHelper({ private: true, expectedDir: null });
});
/**
* Opens a new window and performs some test actions on it based
* on the options object that have been passed in.
*
* @param options (Object)
* An object with the following properties:
*
* clearHistory (bool, optional):
* Whether or not to simulate clearing session history.
* Defaults to false.
*
* setDir (nsIFile, optional):
* An nsIFile for setting the last download directory.
* If not set, the load download directory is not changed.
*
* expectedDir (nsIFile, expectedDir):
* An nsIFile for what we expect the last download directory
* should be. The nsIFile is not compared directly - only
* paths are compared. If expectedDir is not set, then the
* last download directory is expected to be null.
*
* @returns Promise
*/
async function testHelper(options) {
let win = await BrowserTestUtils.openNewBrowserWindow(options);
let gDownloadLastDir = new DownloadLastDir(win);
if (options.clearHistory) {
clearHistory();
}
if (options.setDir) {
gDownloadLastDir.file = options.setDir;
}
let expectedDir = options.expectedDir;
if (expectedDir) {
is(
gDownloadLastDir.file.path,
expectedDir.path,
"gDownloadLastDir should point to the expected last directory"
);
isnot(
gDownloadLastDir.file,
expectedDir,
"gDownloadLastDir.file should not be pointing to the last directory"
);
} else {
is(gDownloadLastDir.file, null, "gDownloadLastDir should be null");
}
gDownloadLastDir.cleanupPrivateFile();
await BrowserTestUtils.closeWindow(win);
}