browser/base/content/test/general/browser_save_private_link_perwindowpb.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 let {LoadContextInfo} = Cu.import("resource://gre/modules/LoadContextInfo.jsm", null);
     7 function test() {
     8   // initialization
     9   waitForExplicitFinish();
    10   let windowsToClose = [];
    11   let testURI = "http://mochi.test:8888/browser/browser/base/content/test/general/bug792517.html";
    12   let fileName;
    13   let MockFilePicker = SpecialPowers.MockFilePicker;
    14   let cache = Cc["@mozilla.org/netwerk/cache-storage-service;1"]
    15               .getService(Ci.nsICacheStorageService);
    17   function checkDiskCacheFor(filename, goon) {
    18     Visitor.prototype = {
    19       onCacheStorageInfo: function(num, consumption)
    20       {
    21         info("disk storage contains " + num + " entries");
    22       },
    23       onCacheEntryInfo: function(entry)
    24       {
    25         info(entry.key);
    26         is(entry.key.contains(filename), false, "web content present in disk cache");
    27       },
    28       onCacheEntryVisitCompleted: function()
    29       {
    30         goon();
    31       }
    32     };
    33     function Visitor() {}
    35     var storage = cache.diskCacheStorage(LoadContextInfo.default, false);
    36     storage.asyncVisitStorage(new Visitor(), true /* Do walk entries */);
    37   }
    39   function onTransferComplete(downloadSuccess) {
    40     ok(downloadSuccess, "Image file should have been downloaded successfully");
    42     // Give the request a chance to finish and create a cache entry
    43     executeSoon(function() {
    44       checkDiskCacheFor(fileName, finish);
    45       mockTransferCallback = null;
    46     });
    47   }
    49   function createTemporarySaveDirectory() {
    50     var saveDir = Cc["@mozilla.org/file/directory_service;1"]
    51                     .getService(Ci.nsIProperties)
    52                     .get("TmpD", Ci.nsIFile);
    53     saveDir.append("testsavedir");
    54     if (!saveDir.exists())
    55       saveDir.create(Ci.nsIFile.DIRECTORY_TYPE, 0755);
    56     return saveDir;
    57   }
    59   function doTest(aIsPrivateMode, aWindow, aCallback) {
    60     function contextMenuOpened(event) {
    61       cache.clear();
    63       aWindow.document.removeEventListener("popupshown", contextMenuOpened);
    65       // Create the folder the image will be saved into.
    66       var destDir = createTemporarySaveDirectory();
    67       var destFile = destDir.clone();
    69       MockFilePicker.displayDirectory = destDir;
    70       MockFilePicker.showCallback = function(fp) {
    71         fileName = fp.defaultString;
    72         destFile.append (fileName);
    73         MockFilePicker.returnFiles = [destFile];
    74         MockFilePicker.filterIndex = 1; // kSaveAsType_URL
    75       };
    77       mockTransferCallback = onTransferComplete;
    78       mockTransferRegisterer.register();
    80       registerCleanupFunction(function () {
    81         mockTransferRegisterer.unregister();
    82         MockFilePicker.cleanup();
    83         destDir.remove(true);
    84       });
    86       // Select "Save Image As" option from context menu
    87       var saveVideoCommand = aWindow.document.getElementById("context-saveimage");
    88       saveVideoCommand.doCommand();
    90       event.target.hidePopup();
    91     }
    93     aWindow.gBrowser.addEventListener("pageshow", function pageShown(event) {
    94       // If data: -url PAC file isn't loaded soon enough, we may get about:privatebrowsing loaded
    95       if (event.target.location == "about:blank" ||
    96           event.target.location == "about:privatebrowsing") {
    97         aWindow.gBrowser.selectedBrowser.loadURI(testURI);
    98         return;
    99       }
   100       aWindow.gBrowser.removeEventListener("pageshow", pageShown);
   102       waitForFocus(function () {
   103         aWindow.document.addEventListener("popupshown", contextMenuOpened, false);
   104         var img = aWindow.gBrowser.selectedBrowser.contentDocument.getElementById("img");
   105         EventUtils.synthesizeMouseAtCenter(img,
   106                                            { type: "contextmenu", button: 2 },
   107                                            aWindow.gBrowser.contentWindow);
   108       }, aWindow.gBrowser.selectedBrowser.contentWindow);
   109     });
   110   }
   112   function testOnWindow(aOptions, aCallback) {
   113     whenNewWindowLoaded(aOptions, function(aWin) {
   114       windowsToClose.push(aWin);
   115       // execute should only be called when need, like when you are opening
   116       // web pages on the test. If calling executeSoon() is not necesary, then
   117       // call whenNewWindowLoaded() instead of testOnWindow() on your test.
   118       executeSoon(function() aCallback(aWin));
   119     });
   120   };
   122    // this function is called after calling finish() on the test.
   123   registerCleanupFunction(function() {
   124     windowsToClose.forEach(function(aWin) {
   125       aWin.close();
   126     });
   127   });
   129   MockFilePicker.init(window);
   130   // then test when on private mode
   131   testOnWindow({private: true}, function(aWin) {
   132     doTest(true, aWin, finish);
   133   });
   134 }
   136 Cc["@mozilla.org/moz/jssubscript-loader;1"]
   137   .getService(Ci.mozIJSSubScriptLoader)
   138   .loadSubScript("chrome://mochitests/content/browser/toolkit/content/tests/browser/common/mockTransfer.js",
   139                  this);

mercurial