tor-browser

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

browser_bug1798178.js (2667B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 Services.scriptloader.loadSubScript(
      7  "chrome://mochitests/content/browser/toolkit/content/tests/browser/common/mockTransfer.js",
      8  this
      9 );
     10 
     11 const TEST_URL =
     12  getRootDirectory(gTestPath).replace(
     13    "chrome://mochitests/content",
     14    "https://example.com"
     15  ) + "file_bug1798178.html";
     16 
     17 let MockFilePicker = SpecialPowers.MockFilePicker;
     18 MockFilePicker.init(window.browsingContext);
     19 
     20 function createTemporarySaveDirectory() {
     21  let saveDir = Services.dirsvc.get("TmpD", Ci.nsIFile);
     22  saveDir.append("testsavedir");
     23  if (!saveDir.exists()) {
     24    info("create testsavedir!");
     25    saveDir.create(Ci.nsIFile.DIRECTORY_TYPE, 0o755);
     26  }
     27  info("return from createTempSaveDir: " + saveDir.path);
     28  return saveDir;
     29 }
     30 
     31 add_task(async function test_save_link_cross_origin() {
     32  await SpecialPowers.pushPrefEnv({
     33    set: [["browser.opaqueResponseBlocking", true]],
     34  });
     35  await BrowserTestUtils.withNewTab(TEST_URL, async browser => {
     36    let menu = document.getElementById("contentAreaContextMenu");
     37    let popupShown = BrowserTestUtils.waitForEvent(menu, "popupshown");
     38    BrowserTestUtils.synthesizeMouseAtCenter(
     39      "a[href]",
     40      { type: "contextmenu", button: 2 },
     41      browser
     42    );
     43    await popupShown;
     44 
     45    let filePickerShow = new Promise(r => {
     46      MockFilePicker.showCallback = function (fp) {
     47        ok(true, "filepicker should be shown");
     48        info("MockFilePicker showCallback");
     49 
     50        let fileName = fp.defaultString;
     51        destFile = tempDir.clone();
     52        destFile.append(fileName);
     53 
     54        MockFilePicker.setFiles([destFile]);
     55        MockFilePicker.filterIndex = 1; // kSaveAsType_URL
     56 
     57        info("MockFilePicker showCallback done");
     58        r();
     59      };
     60    });
     61 
     62    info("Let's create a temporary dir");
     63    let tempDir = createTemporarySaveDirectory();
     64    let destFile;
     65 
     66    MockFilePicker.displayDirectory = tempDir;
     67 
     68    let transferCompletePromise = new Promise(resolve => {
     69      function onTransferComplete(downloadSuccess) {
     70        ok(downloadSuccess, "File should have been downloaded successfully");
     71        resolve();
     72      }
     73      mockTransferCallback = onTransferComplete;
     74      mockTransferRegisterer.register();
     75    });
     76 
     77    let saveLinkCommand = document.getElementById("context-savelink");
     78    info("saveLinkCommand: " + saveLinkCommand);
     79    saveLinkCommand.doCommand();
     80 
     81    await filePickerShow;
     82 
     83    let popupHiddenPromise = BrowserTestUtils.waitForEvent(menu, "popuphidden");
     84    menu.hidePopup();
     85    await popupHiddenPromise;
     86 
     87    await transferCompletePromise;
     88  });
     89 });