tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

browser_save_private_link_perwindowpb.js (3747B)


      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/. */
      4 
      5 function createTemporarySaveDirectory() {
      6  var saveDir = Services.dirsvc.get("TmpD", Ci.nsIFile);
      7  saveDir.append("testsavedir");
      8  if (!saveDir.exists()) {
      9    saveDir.create(Ci.nsIFile.DIRECTORY_TYPE, 0o755);
     10  }
     11  return saveDir;
     12 }
     13 
     14 function promiseNoCacheEntry(filename) {
     15  return new Promise(resolve => {
     16    Visitor.prototype = {
     17      onCacheStorageInfo(num) {
     18        info("disk storage contains " + num + " entries");
     19      },
     20      onCacheEntryInfo(uri) {
     21        let urispec = uri.asciiSpec;
     22        info(urispec);
     23        is(
     24          urispec.includes(filename),
     25          false,
     26          "web content present in disk cache"
     27        );
     28      },
     29      onCacheEntryVisitCompleted() {
     30        resolve();
     31      },
     32    };
     33    function Visitor() {}
     34 
     35    let storage = Services.cache2.diskCacheStorage(
     36      Services.loadContextInfo.default
     37    );
     38    storage.asyncVisitStorage(new Visitor(), true /* Do walk entries */);
     39  });
     40 }
     41 
     42 function promiseImageDownloaded() {
     43  return new Promise(resolve => {
     44    let fileName;
     45    let MockFilePicker = SpecialPowers.MockFilePicker;
     46    MockFilePicker.init(window.browsingContext);
     47 
     48    function onTransferComplete(downloadSuccess) {
     49      ok(
     50        downloadSuccess,
     51        "Image file should have been downloaded successfully " + fileName
     52      );
     53 
     54      // Give the request a chance to finish and create a cache entry
     55      resolve(fileName);
     56    }
     57 
     58    // Create the folder the image will be saved into.
     59    var destDir = createTemporarySaveDirectory();
     60    var destFile = destDir.clone();
     61 
     62    MockFilePicker.displayDirectory = destDir;
     63    MockFilePicker.showCallback = function (fp) {
     64      fileName = fp.defaultString;
     65      destFile.append(fileName);
     66      MockFilePicker.setFiles([destFile]);
     67      MockFilePicker.filterIndex = 1; // kSaveAsType_URL
     68    };
     69 
     70    mockTransferCallback = onTransferComplete;
     71    mockTransferRegisterer.register();
     72 
     73    registerCleanupFunction(function () {
     74      mockTransferCallback = null;
     75      mockTransferRegisterer.unregister();
     76      MockFilePicker.cleanup();
     77      destDir.remove(true);
     78    });
     79  });
     80 }
     81 
     82 add_setup(async function () {
     83  await SpecialPowers.pushPrefEnv({
     84    set: [["test.wait300msAfterTabSwitch", true]],
     85  });
     86 });
     87 
     88 add_task(async function () {
     89  let testURI =
     90    "http://mochi.test:8888/browser/browser/base/content/test/general/bug792517.html";
     91  let privateWindow = await BrowserTestUtils.openNewBrowserWindow({
     92    private: true,
     93  });
     94  let tab = await BrowserTestUtils.openNewForegroundTab(
     95    privateWindow.gBrowser,
     96    testURI
     97  );
     98 
     99  let contextMenu = privateWindow.document.getElementById(
    100    "contentAreaContextMenu"
    101  );
    102  let popupShown = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
    103  let popupHidden = BrowserTestUtils.waitForEvent(contextMenu, "popuphidden");
    104  await BrowserTestUtils.synthesizeMouseAtCenter(
    105    "#img",
    106    {
    107      type: "contextmenu",
    108      button: 2,
    109    },
    110    tab.linkedBrowser
    111  );
    112  await popupShown;
    113 
    114  Services.cache2.clear();
    115 
    116  let imageDownloaded = promiseImageDownloaded();
    117  // Select "Save Image As" option from context menu
    118  privateWindow.document.getElementById("context-saveimage").doCommand();
    119 
    120  contextMenu.hidePopup();
    121  await popupHidden;
    122 
    123  // wait for image download
    124  let fileName = await imageDownloaded;
    125  await promiseNoCacheEntry(fileName);
    126 
    127  await BrowserTestUtils.closeWindow(privateWindow);
    128 });
    129 
    130 Services.scriptloader.loadSubScript(
    131  "chrome://mochitests/content/browser/toolkit/content/tests/browser/common/mockTransfer.js",
    132  this
    133 );