Bug 1261842 - Update browser_privatebrowsing_downloadLastDir_toggle.js to use add_task and BrowserTestUtils. r=jdm
authorMike Conley <mconley@mozilla.com>
Tue, 24 May 2016 18:38:41 -0400
changeset 346288 e9090cf2576f79ed6e6344f8f1c92488502f9a81
parent 346287 715de7740db10b6c1bbdeea0c82132a95af3f788
child 346289 ee23a9c69693606a6731f6318e615555f4cf5685
push id6389
push userraliiev@mozilla.com
push dateMon, 19 Sep 2016 13:38:22 +0000
treeherdermozilla-beta@01d67bfe6c81 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjdm
bugs1261842
milestone50.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1261842 - Update browser_privatebrowsing_downloadLastDir_toggle.js to use add_task and BrowserTestUtils. r=jdm MozReview-Commit-ID: 6S64VvZpwDf
browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir_toggle.js
--- 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);
   });
 }