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

Quelle  browser_pdfjs_saveas.js   Sprache: JAVA

 
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */


"use strict";

const RELATIVE_DIR = "toolkit/components/pdfjs/test/";
const TESTROOT = "http://example.com/browser/" + RELATIVE_DIR;

var MockFilePicker = SpecialPowers.MockFilePicker;

Services.scriptloader.loadSubScript(
  "chrome://mochitests/content/browser/toolkit/content/tests/browser/common/mockTransfer.js",
  this
);

function createPromiseForTransferComplete(expectedFileName, destFile) {
  return new Promise(resolve => {
    MockFilePicker.showCallback = fp => {
      info("Filepicker shown, checking filename");
      is(fp.defaultString, expectedFileName, "Filename should be correct.");
      let fileName = fp.defaultString;
      destFile.append(fileName);

      MockFilePicker.setFiles([destFile]);
      MockFilePicker.filterIndex = 0; // kSaveAsType_Complete

      MockFilePicker.showCallback = null;
      mockTransferCallback = function (downloadSuccess) {
        ok(downloadSuccess, "File should have been downloaded successfully");
        mockTransferCallback = () => {};
        resolve();
      };
    };
  });
}

let tempDir = createTemporarySaveDirectory();

add_setup(async function () {
  MockFilePicker.init(window.browsingContext);
  mockTransferRegisterer.register();
  registerCleanupFunction(function () {
    mockTransferRegisterer.unregister();
    MockFilePicker.cleanup();
    tempDir.remove(true);
  });
});

/**
 * Check triggering "Save Page As" on a non-forms PDF opens the "Save As" dialog
 * and successfully saves the file.
 */

add_task(async function test_pdf_saveas() {
  await BrowserTestUtils.withNewTab(
    { gBrowser, url: "about:blank" },
    async function (browser) {
      await waitForPdfJS(browser, TESTROOT + "file_pdfjs_test.pdf");
      let destFile = tempDir.clone();
      MockFilePicker.displayDirectory = tempDir;
      let fileSavedPromise = createPromiseForTransferComplete(
        "file_pdfjs_test.pdf",
        destFile
      );
      saveBrowser(browser);
      await fileSavedPromise;
      await waitForPdfJSClose(browser);
    }
  );
});

/**
 * Check triggering "Save Page As" on a PDF with forms that has been modified
 * does the following:
 * 1) opens the "Save As" dialog
 * 2) successfully saves the file
 * 3) the new file contains the new form data
 */

add_task(async function test_pdf_saveas_forms() {
  let destFile = tempDir.clone();
  await BrowserTestUtils.withNewTab(
    { gBrowser, url: "about:blank" },
    async function (browser) {
      await waitForPdfJSAnnotationLayer(
        browser,
        TESTROOT + "file_pdfjs_form.pdf"
      );
      // Fill in the form input field.
      await SpecialPowers.spawn(browser, [], async function () {
        let formInput = content.document.querySelector(
          "#viewerContainer input"
        );
        ok(formInput, "PDF contains text field.");
        is(formInput.value, """Text field is empty to start.");
        formInput.value = "test";
        formInput.dispatchEvent(new content.window.Event("input"));
      });

      MockFilePicker.displayDirectory = tempDir;
      let fileSavedPromise = createPromiseForTransferComplete(
        "file_pdfjs_form.pdf",
        destFile
      );
      saveBrowser(browser);
      await fileSavedPromise;
      await waitForPdfJSClose(browser);
    }
  );

  // Now that the file has been modified and saved, load it to verify the form
  // data persisted.
  await BrowserTestUtils.withNewTab(
    { gBrowser, url: "about:blank" },
    async function (browser) {
      await waitForPdfJSAnnotationLayer(browser, NetUtil.newURI(destFile).spec);
      await SpecialPowers.spawn(browser, [], async function () {
        let formInput = content.document.querySelector(
          "#viewerContainer input"
        );
        ok(formInput, "PDF contains text field.");
        is(formInput.value, "test""Text field is filled in.");
      });
      await waitForPdfJSClose(browser);
    }
  );
});

/**
 * Check triggering "Save Page As" on a PDF which was loaded with a custom
 * content disposition filename defaults to using the provided filename.
 */

add_task(async function test_pdf_saveas_customname() {
  await SpecialPowers.pushPrefEnv({
    set: [
      ["browser.helperApps.showOpenOptionForPdfJS"true],
      ["browser.helperApps.showOpenOptionForViewableInternally"true],
      ["browser.download.always_ask_before_handling_new_types"false],
      ["browser.download.open_pdf_attachments_inline"true],
    ],
  });
  await BrowserTestUtils.withNewTab(
    { gBrowser, url: TESTROOT + "file_pdf_download_link.html" },
    async function (browser) {
      // Click on the download link in the loaded file. This will create a new
      // tab with the PDF loaded in it.
      BrowserTestUtils.synthesizeMouseAtCenter("#custom_filename", {}, browser);
      let tab = await BrowserTestUtils.waitForNewTab(gBrowser);
      info("tab created");

      // Wait for the PDF's metadata to be fully loaded before downloading, as
      // otherwise it won't be aware of the content disposition filfename yet.
      await BrowserTestUtils.waitForContentEvent(
        tab.linkedBrowser,
        "metadataloaded",
        false,
        null,
        true
      );
      info("metadata loaded");

      let destFile = tempDir.clone();
      MockFilePicker.displayDirectory = tempDir;
      let fileSavedPromise = createPromiseForTransferComplete(
        "custom_filename.pdf",
        destFile
      );
      saveBrowser(tab.linkedBrowser);
      await fileSavedPromise;
      await waitForPdfJSClose(tab.linkedBrowser, /* closeTab = */ true);
    }
  );
  await SpecialPowers.popPrefEnv();
});

/**
 * Check if the directory where the pdfs are saved is based on the original
 * domain (see bug 1768383).
 */

add_task(async function () {
  await BrowserTestUtils.withNewTab(
    { gBrowser, url: "about:blank" },
    async function (browser) {
      const downloadLastDir = new DownloadLastDir(null);
      const destDirs = [];
      for (let i = 1; i <= 2; i++) {
        const destDir = createTemporarySaveDirectory(i);
        destDirs.push(destDir);
        const url = `http://test${i}.example.com/browser/${RELATIVE_DIR}file_pdfjs_test.pdf`;
        downloadLastDir.setFile(url, destDir);
        await TestUtils.waitForTick();
      }

      const url = `http://test1.example.com/browser/${RELATIVE_DIR}file_pdfjs_hcm.pdf`;
      await waitForPdfJS(browser, url);

      const fileSavedPromise = new Promise(resolve => {
        MockFilePicker.showCallback = fp => {
          MockFilePicker.setFiles([]);
          MockFilePicker.showCallback = null;
          resolve(fp.displayDirectory.path);
        };
      });
      registerCleanupFunction(() => {
        for (const destDir of destDirs) {
          destDir.remove(true);
        }
      });
      saveBrowser(browser);
      const dirPath = await fileSavedPromise;
      is(
        dirPath,
        destDirs[0].path,
        "Proposed directory must be based on the domain"
      );
      await waitForPdfJSClose(browser);
    }
  );
});

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

¤ Dauer der Verarbeitung: 0.15 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.