fune/toolkit/components/printing/tests/browser_pdf_printer_settings.js
Emilio Cobos Álvarez 7e23a4287f Bug 1760836 - Support printing to an nsIOutputStream. r=jfkthame,jrmuizel,webdriver-reviewers,geckoview-reviewers,agi
The trickiest bits are the PrintTargetCG ones, the rest is just plumbing
and cleanups and tests, but let me know if you want those to be split
out, can do.

The GTK change to nsPrintSettingsGTK::GetResolution is a no-op (we only
read resolution on windows), but I did that because we assume that it
doesn't fail and GTK returns a sane default anyways.

Differential Revision: https://phabricator.services.mozilla.com/D142199
2022-03-30 18:51:58 +00:00

125 lines
3.7 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
add_task(async function testPDFPrinterSettings() {
await PrintHelper.withTestPage(async helper => {
// Set some bad prefs
await SpecialPowers.pushPrefEnv({
set: [
["print.print_to_file", false],
["print.print_in_color", false],
["print.printer_Mozilla_Save_to_PDF.print_to_file", false],
["print.printer_Mozilla_Save_to_PDF.print_in_color", false],
],
});
await helper.startPrint();
await helper.awaitAnimationFrame();
// Verify we end up with sane settings
let { settings } = helper;
ok(
settings.outputDestination == Ci.nsIPrintSettings.kOutputDestinationFile,
"Check the current settings have file destination"
);
ok(
settings.printInColor,
"Check the current settings have a truthy printInColor for the PDF printer"
);
is(
settings.outputFormat,
Ci.nsIPrintSettings.kOutputFormatPDF,
"The PDF printer has the correct outputFormat"
);
await helper.closeDialog();
await SpecialPowers.popPrefEnv();
});
});
add_task(async function testPDFCancel() {
await PrintHelper.withTestPage(async helper => {
await helper.startPrint();
helper.mockFilePickerCancel();
let form = helper.doc.querySelector("#print");
// retrieve all elements other than cancel button
let elements = [];
for (let element of form.elements) {
if (element.name != "cancel") {
elements.push(element);
}
}
let getDisabledStates = () => elements.map(el => el.disabled);
let initialDisabledStates = getDisabledStates();
ok(
initialDisabledStates.some(disabled => !disabled),
"At least one enabled form element before submitting"
);
let getShownDisabledStates = new Promise(resolve => {
MockFilePicker.showCallback = () => resolve(getDisabledStates());
});
EventUtils.sendKey("return", helper.win);
let shownDisabledStates = await getShownDisabledStates;
ok(shownDisabledStates, "Got disabled states while shown");
ok(
shownDisabledStates.every(disabled => disabled),
"All elements were disabled when showing picker"
);
let cancelButton = helper.doc.querySelector(`button[name="cancel"]`);
ok(!cancelButton.disabled, "Cancel button is still enabled");
let saveButton = form.querySelector("#print-button");
await BrowserTestUtils.waitForAttributeRemoval("disabled", saveButton);
helper.assertDialogOpen();
is(
getDisabledStates().every(
(disabledState, index) => disabledState === initialDisabledStates[index]
),
true,
"Previous disabled states match after returning to preview"
);
// Close the dialog with Escape.
await helper.withClosingFn(() => {
EventUtils.synthesizeKey("VK_ESCAPE", {}, helper.win);
});
helper.assertDialogClosed();
});
});
add_task(async function testPDFFile() {
await PrintHelper.withTestPage(async helper => {
await helper.startPrint();
helper.mockFilePicker("pdfFile.pdf");
let filePath = PathUtils.join(
Services.dirsvc.get("TmpD", Ci.nsIFile).path,
"pdfFile.pdf"
);
await helper.withClosingFn(() => {
EventUtils.sendKey("return", helper.win);
});
try {
Services.prefs.getStringPref(
"print.printer_Mozilla_Save_to_PDF.print_to_filename"
);
ok(false, "Should have cleared the filename pref");
} catch (ex) {
ok(true, "Cleared the filename pref");
}
is(await IOUtils.exists(filePath), true, "Saved pdf file exists");
ok(await IOUtils.read(filePath), "Saved pdf file is not empty");
});
});