Bug 1263031 modernize and clarify test, r=jaws
☠☠ backed out by 711691554872 ☠ ☠
authorShane Caraveo <scaraveo@mozilla.com>
Mon, 11 Apr 2016 15:41:18 -0700
changeset 292800 105e0e4b9d800048ff535543b0c5f01919612a3c
parent 292799 546029898181bdafe1599a35226b23f9c2997856
child 292801 4118760a3981d37b7ae31d8c6a9326318e6b3ee8
push id74979
push usercbook@mozilla.com
push dateTue, 12 Apr 2016 11:53:25 +0000
treeherdermozilla-inbound@cb2b8b7bc47f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjaws
bugs1263031
milestone48.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 1263031 modernize and clarify test, r=jaws
browser/base/content/test/general/browser_save_private_link_perwindowpb.js
--- a/browser/base/content/test/general/browser_save_private_link_perwindowpb.js
+++ b/browser/base/content/test/general/browser_save_private_link_perwindowpb.js
@@ -1,140 +1,114 @@
 /* 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/. */
 
-var {LoadContextInfo} = Cu.import("resource://gre/modules/LoadContextInfo.jsm", null);
+function createTemporarySaveDirectory() {
+  var saveDir = Cc["@mozilla.org/file/directory_service;1"]
+                  .getService(Ci.nsIProperties)
+                  .get("TmpD", Ci.nsIFile);
+  saveDir.append("testsavedir");
+  if (!saveDir.exists())
+    saveDir.create(Ci.nsIFile.DIRECTORY_TYPE, 0o755);
+  return saveDir;
+}
 
-function test() {
-  // initialization
-  waitForExplicitFinish();
-  let windowsToClose = [];
-  let testURI = "http://mochi.test:8888/browser/browser/base/content/test/general/bug792517.html";
-  let fileName;
-  let MockFilePicker = SpecialPowers.MockFilePicker;
+function promiseNoCacheEntry() {
   let cache = Cc["@mozilla.org/netwerk/cache-storage-service;1"]
               .getService(Ci.nsICacheStorageService);
-
-  function checkDiskCacheFor(filename, goon) {
+  cache.clear();
+  return new Promise((resolve, reject) => {
+    let entries = 0;
     Visitor.prototype = {
       onCacheStorageInfo: function(num, consumption)
       {
         info("disk storage contains " + num + " entries");
+        entries += num;
       },
       onCacheEntryInfo: function(uri)
       {
-        var urispec = uri.asciiSpec;
-        info(urispec);
-        is(urispec.includes(filename), false, "web content present in disk cache");
+        let urispec = uri.asciiSpec;
+        ok(false, "web content present in disk cache " + urispec);
       },
-      onCacheEntryVisitCompleted: function()
-      {
-        goon();
+      onCacheEntryVisitCompleted: function() {
+        is(entries, 0, "no content cached");
+        resolve();
       }
     };
     function Visitor() {}
 
-    var storage = cache.diskCacheStorage(LoadContextInfo.default, false);
+    let {LoadContextInfo} = Cu.import("resource://gre/modules/LoadContextInfo.jsm", null);
+    let storage = cache.diskCacheStorage(LoadContextInfo.default, false);
     storage.asyncVisitStorage(new Visitor(), true /* Do walk entries */);
-  }
-
-  function onTransferComplete(downloadSuccess) {
-    ok(downloadSuccess, "Image file should have been downloaded successfully");
-
-    // Give the request a chance to finish and create a cache entry
-    executeSoon(function() {
-      checkDiskCacheFor(fileName, finish);
-      mockTransferCallback = null;
-    });
-  }
-
-  function createTemporarySaveDirectory() {
-    var saveDir = Cc["@mozilla.org/file/directory_service;1"]
-                    .getService(Ci.nsIProperties)
-                    .get("TmpD", Ci.nsIFile);
-    saveDir.append("testsavedir");
-    if (!saveDir.exists())
-      saveDir.create(Ci.nsIFile.DIRECTORY_TYPE, 0o755);
-    return saveDir;
-  }
-
-  function doTest(aIsPrivateMode, aWindow, aCallback) {
-    function contextMenuOpened(event) {
-      cache.clear();
+  });
+}
 
-      aWindow.document.removeEventListener("popupshown", contextMenuOpened);
-
-      // Create the folder the image will be saved into.
-      var destDir = createTemporarySaveDirectory();
-      var destFile = destDir.clone();
-
-      MockFilePicker.displayDirectory = destDir;
-      MockFilePicker.showCallback = function(fp) {
-        fileName = fp.defaultString;
-        destFile.append (fileName);
-        MockFilePicker.returnFiles = [destFile];
-        MockFilePicker.filterIndex = 1; // kSaveAsType_URL
-      };
+function promiseImageDownloaded() {
+  return new Promise((resolve, reject) => {
+    let fileName;
+    let MockFilePicker = SpecialPowers.MockFilePicker;
+    MockFilePicker.init(window);
 
-      mockTransferCallback = onTransferComplete;
-      mockTransferRegisterer.register();
+    function onTransferComplete(downloadSuccess) {
+      ok(downloadSuccess, "Image file should have been downloaded successfully ");
 
-      registerCleanupFunction(function () {
-        mockTransferRegisterer.unregister();
-        MockFilePicker.cleanup();
-        destDir.remove(true);
-      });
-
-      // Select "Save Image As" option from context menu
-      var saveVideoCommand = aWindow.document.getElementById("context-saveimage");
-      saveVideoCommand.doCommand();
-
-      event.target.hidePopup();
+      // Give the request a chance to finish and create a cache entry
+      resolve(fileName);
     }
 
-    aWindow.gBrowser.addEventListener("pageshow", function pageShown(event) {
-      // If data: --url PAC file isn't loaded soon enough, we may get about:privatebrowsing loaded
-      if (event.target.location == "about:blank" ||
-          event.target.location == "about:privatebrowsing") {
-        aWindow.gBrowser.selectedBrowser.loadURI(testURI);
-        return;
-      }
-      aWindow.gBrowser.removeEventListener("pageshow", pageShown);
-
-      waitForFocus(function () {
-        aWindow.document.addEventListener("popupshown", contextMenuOpened, false);
-        var img = aWindow.gBrowser.selectedBrowser.contentDocument.getElementById("img");
-        EventUtils.synthesizeMouseAtCenter(img,
-                                           { type: "contextmenu", button: 2 },
-                                           aWindow.gBrowser.contentWindow);
-      }, aWindow.gBrowser.selectedBrowser);
-    });
-  }
+    // Create the folder the image will be saved into.
+    var destDir = createTemporarySaveDirectory();
+    var destFile = destDir.clone();
 
-  function testOnWindow(aOptions, aCallback) {
-    whenNewWindowLoaded(aOptions, function(aWin) {
-      windowsToClose.push(aWin);
-      // execute should only be called when need, like when you are opening
-      // web pages on the test. If calling executeSoon() is not necesary, then
-      // call whenNewWindowLoaded() instead of testOnWindow() on your test.
-      executeSoon(() => aCallback(aWin));
-    });
-  };
+    MockFilePicker.displayDirectory = destDir;
+    MockFilePicker.showCallback = function(fp) {
+      fileName = fp.defaultString;
+      destFile.append (fileName);
+      MockFilePicker.returnFiles = [destFile];
+      MockFilePicker.filterIndex = 1; // kSaveAsType_URL
+    };
 
-   // this function is called after calling finish() on the test.
-  registerCleanupFunction(function() {
-    windowsToClose.forEach(function(aWin) {
-      aWin.close();
+    mockTransferCallback = onTransferComplete;
+    mockTransferRegisterer.register();
+
+    registerCleanupFunction(function () {
+      mockTransferCallback = null;
+      mockTransferRegisterer.unregister();
+      MockFilePicker.cleanup();
+      destDir.remove(true);
     });
-  });
 
-  MockFilePicker.init(window);
-  // then test when on private mode
-  testOnWindow({private: true}, function(aWin) {
-    doTest(true, aWin, finish);
   });
 }
 
+add_task(function* () {
+  let testURI = "http://mochi.test:8888/browser/browser/base/content/test/general/bug792517.html";
+  let privateWindow = yield BrowserTestUtils.openNewBrowserWindow({private: true});
+  let tab = yield BrowserTestUtils.openNewForegroundTab(privateWindow.gBrowser, testURI);
+
+  let contextMenu = privateWindow.document.getElementById("contentAreaContextMenu");
+  let popupShown = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
+  let popupHidden = BrowserTestUtils.waitForEvent(contextMenu, "popuphidden");
+  yield BrowserTestUtils.synthesizeMouseAtCenter("#img", {
+    type: "contextmenu",
+    button: 2
+  }, tab.linkedBrowser);
+  yield popupShown;
+
+  let imageDownloaded = promiseImageDownloaded();
+  // Select "Save Image As" option from context menu
+  privateWindow.document.getElementById("context-saveimage").doCommand();
+
+  contextMenu.hidePopup();
+  yield popupHidden;
+
+  // wait for image download
+  yield imageDownloaded;
+  yield promiseNoCacheEntry();
+
+  yield BrowserTestUtils.closeWindow(privateWindow);
+});
+
 Cc["@mozilla.org/moz/jssubscript-loader;1"]
   .getService(Ci.mozIJSSubScriptLoader)
   .loadSubScript("chrome://mochitests/content/browser/toolkit/content/tests/browser/common/mockTransfer.js",
                  this);