--- a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir_toggle.js
+++ b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir_toggle.js
@@ -1,97 +1,105 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+Cu.import("resource://gre/modules/FileUtils.jsm");
+Cu.import("resource://gre/modules/DownloadLastDir.jsm");
-function test() {
- waitForExplicitFinish();
-
- let FileUtils =
- Cu.import("resource://gre/modules/FileUtils.jsm", {}).FileUtils;
- let DownloadLastDir =
- Cu.import("resource://gre/modules/DownloadLastDir.jsm", {}).DownloadLastDir;
-
+/**
+ * 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(function* test_downloads_last_dir_toggle() {
let tmpDir = FileUtils.getDir("TmpD", [], true);
let dir1 = newDirectory();
registerCleanupFunction(function () {
Services.prefs.clearUserPref("browser.download.lastDir");
dir1.remove(true);
});
- function testOnWindow(aPrivate, aCallback) {
- whenNewWindowLoaded({private: aPrivate}, function(win) {
- let gDownloadLastDir = new DownloadLastDir(win);
- aCallback(win, gDownloadLastDir);
- gDownloadLastDir.cleanupPrivateFile();
- win.close();
- });
- }
+ let win = yield 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");
- function checkDownloadLastDirInit(aWin, gDownloadLastDir, aCallback) {
- 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;
- 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 = tmpDir;
+ clearHistory();
+ is(gDownloadLastDir.file, null, "gDownloadLastDir.file should be null");
+
+ gDownloadLastDir.file = tmpDir;
+ yield BrowserTestUtils.closeWindow(win);
- 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;
- aCallback();
- }
+ info("Opening the first private window");
+ yield testHelper({ private: true, expectedDir: tmpDir });
+ info("Opening a non-private window");
+ yield testHelper({ private: false, expectedDir: tmpDir });
+ info("Opening a private window and setting download directory");
+ yield testHelper({ private: true, setDir: dir1, expectedDir: dir1 });
+ info("Opening a non-private window and checking download directory");
+ yield testHelper({ private: false, expectedDir: tmpDir });
+ info("Opening private window and clearing history");
+ yield testHelper({ private: true, clearHistory: true, expectedDir: null });
+ info("Opening a non-private window and checking download directory");
+ yield testHelper({ private: true, expectedDir: null });
+});
- function checkDownloadLastDir(aWin, gDownloadLastDir, aLastDir, aUpdate, aCallback) {
- if (aUpdate)
- gDownloadLastDir.file = aLastDir;
- is(gDownloadLastDir.file.path, aLastDir.path,
- "gDownloadLastDir should point to the expected last directory");
- isnot(gDownloadLastDir.file, aLastDir,
- "gDownloadLastDir.file should not be pointing to the last directory");
- aCallback();
- }
-
- function checkDownloadLastDirNull(aWin, gDownloadLastDir, aCallback) {
- is(gDownloadLastDir.file, null, "gDownloadLastDir should be null");
- aCallback();
- }
+/**
+ * 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
+ */
+function testHelper(options) {
+ return new Task.spawn(function() {
+ let win = yield BrowserTestUtils.openNewBrowserWindow(options);
+ let gDownloadLastDir = new DownloadLastDir(win);
- testOnWindow(false, function(win, downloadDir) {
- checkDownloadLastDirInit(win, downloadDir, function() {
- testOnWindow(true, function(win, downloadDir) {
- checkDownloadLastDir(win, downloadDir, tmpDir, false, function() {
- testOnWindow(false, function(win, downloadDir) {
- checkDownloadLastDir(win, downloadDir, tmpDir, false, function() {
- testOnWindow(true, function(win, downloadDir) {
- checkDownloadLastDir(win, downloadDir, dir1, true, function() {
- testOnWindow(false, function(win, downloadDir) {
- checkDownloadLastDir(win, downloadDir, tmpDir, false, function() {
- testOnWindow(true, function(win, downloadDir) {
- clearHistory();
- checkDownloadLastDirNull(win, downloadDir, function() {
- testOnWindow(false, function(win, downloadDir) {
- checkDownloadLastDirNull(win, downloadDir, finish);
- });
- });
- });
- });
- });
- });
- });
- });
- });
- });
- });
- });
+ 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();
+ yield BrowserTestUtils.closeWindow(win);
});
}