Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/browser/base/content/test/general/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 6 kB image not shown  

Quelle  browser_bug676619.js   Sprache: JAVA

 
var MockFilePicker = SpecialPowers.MockFilePicker;
MockFilePicker.init(window.browsingContext);

function waitForNewWindow() {
  return new Promise(resolve => {
    var listener = {
      onOpenWindow: aXULWindow => {
        info("Download window shown...");
        Services.wm.removeListener(listener);

        function downloadOnLoad() {
          domwindow.removeEventListener("load", downloadOnLoad, true);

          is(
            domwindow.document.location.href,
            "chrome://mozapps/content/downloads/unknownContentType.xhtml",
            "Download page appeared"
          );
          resolve(domwindow);
        }

        var domwindow = aXULWindow.docShell.domWindow;
        domwindow.addEventListener("load", downloadOnLoad, true);
      },
      onCloseWindow: () => {},
    };

    Services.wm.addListener(listener);
    registerCleanupFunction(() => {
      try {
        Services.wm.removeListener(listener);
      } catch (e) {}
    });
  });
}

async function waitForFilePickerTest(link, name) {
  let filePickerShownPromise = new Promise(resolve => {
    MockFilePicker.showCallback = function (fp) {
      ok(true"Filepicker shown.");
      is(name, fp.defaultString, " filename matches download name");
      setTimeout(resolve, 0);
      return Ci.nsIFilePicker.returnCancel;
    };
  });

  SpecialPowers.spawn(gBrowser.selectedBrowser, [link], contentLink => {
    content.document.getElementById(contentLink).click();
  });

  await filePickerShownPromise;

  await SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => {
    Assert.equal(
      content.document.getElementById("unload-flag").textContent,
      "Okay",
      "beforeunload shouldn't have fired"
    );
  });
}

async function testLink(link, name) {
  info("Checking " + link + " with name: " + name);

  if (
    Services.prefs.getBoolPref(
      "browser.download.always_ask_before_handling_new_types",
      false
    )
  ) {
    let winPromise = waitForNewWindow();

    SpecialPowers.spawn(gBrowser.selectedBrowser, [link], contentLink => {
      content.document.getElementById(contentLink).click();
    });

    let win = await winPromise;

    await SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => {
      Assert.equal(
        content.document.getElementById("unload-flag").textContent,
        "Okay",
        "beforeunload shouldn't have fired"
      );
    });

    is(
      win.document.getElementById("location").value,
      name,
      `file name should match (${link})`
    );

    await BrowserTestUtils.closeWindow(win);
  } else {
    await waitForFilePickerTest(link, name);
  }
}

// Cross-origin URL does not trigger a download
async function testLocation(link) {
  let tabPromise = BrowserTestUtils.waitForNewTab(gBrowser);

  SpecialPowers.spawn(gBrowser.selectedBrowser, [link], contentLink => {
    content.document.getElementById(contentLink).click();
  });

  let tab = await tabPromise;
  BrowserTestUtils.removeTab(tab);
}

async function runTest(url) {
  let tab = BrowserTestUtils.addTab(gBrowser, url);
  gBrowser.selectedTab = tab;

  let browser = gBrowser.getBrowserForTab(tab);
  await BrowserTestUtils.browserLoaded(browser);

  await testLink("link1""test.txt");
  await testLink("link2""video.webm");
  await testLink("link3""just some video.webm");
  await testLink("link4""with-target.txt");
  await testLink("link5""javascript.html");
  await testLink("link6""test.blob");
  await testLink("link7""test.file");
  await testLink("link8""download_page_3.txt");
  await testLink("link9""download_page_3.txt");
  await testLink("link10""download_page_4.txt");
  await testLink("link11""download_page_4.txt");
  // eslint-disable-next-line @microsoft/sdl/no-insecure-url
  await testLocation("link12""http://example.com/");

  // Check that we enforce the correct extension if the website's
  // is bogus or missing. These extensions can differ slightly (ogx vs ogg,
  // htm vs html) on different OSes.
  let webmExtension = getMIMEInfoForType("video/webm").primaryExtension;
  await testLink("link13""no file extension." + webmExtension);

  // See https://bugzilla.mozilla.org/show_bug.cgi?id=1690051#c8
  if (AppConstants.platform != "win") {
    const PREF = "browser.download.sanitize_non_media_extensions";
    ok(Services.prefs.getBoolPref(PREF), "pref is set before");

    // Check that ics (iCal) extension is changed/fixed when the pref is true.
    await testLink("link14""dummy.ics");

    // And not changed otherwise.
    Services.prefs.setBoolPref(PREF, false);
    await testLink("link14""dummy.not-ics");
    Services.prefs.clearUserPref(PREF);
  }

  await testLink("link15""download_page_3.txt");
  await testLink("link16""download_page_3.txt");
  await testLink("link17""download_page_4.txt");
  await testLink("link18""download_page_4.txt");
  await testLink("link19""download_page_4.txt");
  await testLink("link20""download_page_4.txt");
  await testLink("link21""download_page_4.txt");
  await testLink("link22""download_page_4.txt");

  BrowserTestUtils.removeTab(tab);
}

async function setDownloadDir() {
  let tmpDir = PathUtils.join(
    PathUtils.tempDir,
    "testsavedir" + Math.floor(Math.random() * 2 ** 32)
  );
  // Create this dir if it doesn't exist (ignores existing dirs)
  await IOUtils.makeDirectory(tmpDir);
  registerCleanupFunction(async function () {
    try {
      await IOUtils.remove(tmpDir, { recursive: true });
    } catch (e) {
      console.error(e);
    }
    Services.prefs.clearUserPref("browser.download.folderList");
    Services.prefs.clearUserPref("browser.download.dir");
  });
  Services.prefs.setIntPref("browser.download.folderList", 2);
  Services.prefs.setCharPref("browser.download.dir", tmpDir);
}

add_task(async function () {
  requestLongerTimeout(3);
  waitForExplicitFinish();

  await setDownloadDir();

  info(
    "Test with browser.download.always_ask_before_handling_new_types enabled."
  );
  await SpecialPowers.pushPrefEnv({
    set: [
      ["browser.download.always_ask_before_handling_new_types"true],
      ["browser.download.useDownloadDir"true],
    ],
  });

  await runTest(
    "http://mochi.test:8888/browser/browser/base/content/test/general/download_page.html"
  );
  await runTest(
    "https://example.com:443/browser/browser/base/content/test/general/download_page.html"
  );

  info(
    "Test with browser.download.always_ask_before_handling_new_types disabled."
  );
  await SpecialPowers.pushPrefEnv({
    set: [
      ["browser.download.always_ask_before_handling_new_types"false],
      ["browser.download.useDownloadDir"false],
    ],
  });

  await runTest(
    "http://mochi.test:8888/browser/browser/base/content/test/general/download_page.html"
  );
  await runTest(
    "https://example.com:443/browser/browser/base/content/test/general/download_page.html"
  );

  MockFilePicker.cleanup();
});

Messung V0.5
C=94 H=100 G=96

¤ Dauer der Verarbeitung: 0.18 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.