tor-browser

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

browser_download_after_revoke.js (3119B)


      1 async function test() {
      2  waitForExplicitFinish();
      3  const target = "http://example.com/browser/dom/url/tests/empty.html";
      4  info("Loading download page...");
      5  let tab = BrowserTestUtils.addTab(gBrowser, target);
      6  registerCleanupFunction(function () {
      7    gBrowser.removeTab(tab);
      8    window.restore();
      9  });
     10  gBrowser.selectedTab = tab;
     11  BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, target).then(
     12    async () => {
     13      info("Page loaded.");
     14      let allDownloads = await Downloads.getList(Downloads.ALL);
     15      let started = new Promise(resolve => {
     16        if (
     17          Services.prefs.getBoolPref(
     18            "browser.download.always_ask_before_handling_new_types",
     19            false
     20          )
     21        ) {
     22          // If the download modal is enabled, wait for it to open and declare the
     23          // download to have begun when we see it.
     24          let listener = {
     25            onOpenWindow(aXULWindow) {
     26              info("Download modal shown...");
     27              Services.wm.removeListener(listener);
     28 
     29              let domwindow = aXULWindow.docShell.domWindow;
     30              function onModalLoad() {
     31                domwindow.removeEventListener("load", onModalLoad, true);
     32 
     33                is(
     34                  domwindow.document.location.href,
     35                  "chrome://mozapps/content/downloads/unknownContentType.xhtml",
     36                  "Download modal loaded..."
     37                );
     38 
     39                domwindow.close();
     40                info("Download modal closed.");
     41                resolve();
     42              }
     43 
     44              domwindow.addEventListener("load", onModalLoad, true);
     45            },
     46            onCloseWindow() {},
     47          };
     48 
     49          Services.wm.addListener(listener);
     50        } else {
     51          // With no download modal, the download will begin on its own, so we need
     52          // to wait to be notified by the downloads list when that happens.
     53          let downloadView = {
     54            onDownloadAdded(download) {
     55              ok(true, "Download was started.");
     56              download.cancel();
     57              allDownloads.removeView(this);
     58              allDownloads.removeFinished();
     59              resolve();
     60            },
     61          };
     62          allDownloads.addView(downloadView);
     63        }
     64      });
     65 
     66      let revoked = SpecialPowers.spawn(
     67        tab.linkedBrowser,
     68        [],
     69        () =>
     70          new Promise(resolve => {
     71            info("Creating BlobURL...");
     72            let blob = new content.Blob(["test"], { type: "text/plain" });
     73            let url = content.URL.createObjectURL(blob);
     74 
     75            let link = content.document.createElement("a");
     76            link.href = url;
     77            link.download = "example.txt";
     78            content.document.body.appendChild(link);
     79            info("Clicking HTMLAnchorElement...");
     80            link.click();
     81 
     82            content.URL.revokeObjectURL(url);
     83            info("BlobURL revoked.");
     84            resolve();
     85          })
     86      );
     87 
     88      info("Waiting for async activities...");
     89      await Promise.all([revoked, started]);
     90      ok(true, "Exiting test.");
     91      finish();
     92    }
     93  );
     94 }