summaryrefslogtreecommitdiffstats
path: root/toolkit/components/printing/tests/browser_modal_print.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/printing/tests/browser_modal_print.js')
-rw-r--r--toolkit/components/printing/tests/browser_modal_print.js309
1 files changed, 309 insertions, 0 deletions
diff --git a/toolkit/components/printing/tests/browser_modal_print.js b/toolkit/components/printing/tests/browser_modal_print.js
new file mode 100644
index 0000000000..c3e3f94874
--- /dev/null
+++ b/toolkit/components/printing/tests/browser_modal_print.js
@@ -0,0 +1,309 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+function assertExpectedPrintPage(helper) {
+ is(
+ helper.sourceURI,
+ PrintHelper.defaultTestPageUrlHTTPS,
+ "The URL of the browser is the one we expect"
+ );
+}
+
+add_task(async function testModalPrintDialog() {
+ await PrintHelper.withTestPageHTTPS(async helper => {
+ helper.assertDialogClosed();
+
+ await helper.startPrint();
+
+ helper.assertDialogOpen();
+
+ // Check that we're printing the right page.
+ assertExpectedPrintPage(helper);
+
+ // Close the dialog with Escape.
+ await helper.withClosingFn(() => {
+ EventUtils.synthesizeKey("VK_ESCAPE", {}, helper.win);
+ });
+
+ helper.assertDialogClosed();
+ });
+});
+
+add_task(async function testPrintMultiple() {
+ await PrintHelper.withTestPageHTTPS(async helper => {
+ helper.assertDialogClosed();
+
+ // First print as usual.
+ await helper.startPrint();
+ helper.assertDialogOpen();
+ assertExpectedPrintPage(helper);
+
+ // Trigger the command a few more times, verify the overlay still exists.
+ ignoreAllUncaughtExceptions(true);
+ for (let i = 0; i < 3; ++i) {
+ try {
+ await helper.startPrint();
+ } finally {
+ helper.assertDialogOpen();
+ }
+ }
+ ignoreAllUncaughtExceptions(false);
+
+ // Verify it's still the correct page.
+ assertExpectedPrintPage(helper);
+
+ // Make sure we clean up, ideally this would be handled by the helper.
+ await TestUtils.waitForTick();
+ await helper.closeDialog();
+ });
+});
+
+add_task(async function testCancelButton() {
+ await PrintHelper.withTestPageHTTPS(async helper => {
+ helper.assertDialogClosed();
+ await helper.startPrint();
+ helper.assertDialogOpen();
+
+ let cancelButton = helper.doc.querySelector("button[name=cancel]");
+ ok(cancelButton, "Got the cancel button");
+ await helper.withClosingFn(() =>
+ EventUtils.synthesizeMouseAtCenter(cancelButton, {}, helper.win)
+ );
+
+ helper.assertDialogClosed();
+ });
+});
+
+add_task(async function testTabOrder() {
+ await PrintHelper.withTestPageHTTPS(async helper => {
+ helper.assertDialogClosed();
+ await helper.startPrint();
+ helper.assertDialogOpen();
+
+ const printerPicker = helper.doc.getElementById("printer-picker");
+ is(
+ helper.doc.activeElement,
+ printerPicker,
+ "Initial focus on printer picker"
+ );
+
+ const previewBrowser = document.querySelector(".printPreviewBrowser");
+ ok(previewBrowser, "Got the print preview browser");
+
+ let focused;
+ let navigationShadowRoot = document.querySelector(
+ ".printPreviewNavigation"
+ ).shadowRoot;
+ for (let buttonId of [
+ "navigateEnd",
+ "navigateNext",
+ "navigatePrevious",
+ "navigateHome",
+ ]) {
+ let button = navigationShadowRoot.getElementById(buttonId);
+ focused = BrowserTestUtils.waitForEvent(button, "focus");
+ await EventUtils.synthesizeKey("KEY_Tab", { shiftKey: true });
+ await focused;
+ }
+
+ focused = BrowserTestUtils.waitForEvent(previewBrowser, "focus");
+ await EventUtils.synthesizeKey("KEY_Tab", { shiftKey: true });
+ await focused;
+ ok(true, "Print preview focused after shift+tab through the paginator");
+
+ focused = BrowserTestUtils.waitForEvent(gNavToolbox, "focus", true);
+ EventUtils.synthesizeKey("KEY_Tab", { shiftKey: true });
+ await focused;
+ ok(true, "Toolbox focused after shift+tab");
+
+ focused = BrowserTestUtils.waitForEvent(previewBrowser, "focus");
+ EventUtils.synthesizeKey("KEY_Tab");
+ await focused;
+ ok(true, "Print preview focused after tab");
+
+ for (let buttonId of [
+ "navigateHome",
+ "navigatePrevious",
+ "navigateNext",
+ "navigateEnd",
+ ]) {
+ let button = navigationShadowRoot.getElementById(buttonId);
+ focused = BrowserTestUtils.waitForEvent(button, "focus");
+ await EventUtils.synthesizeKey("KEY_Tab");
+ await focused;
+ }
+ focused = BrowserTestUtils.waitForEvent(printerPicker, "focus");
+ EventUtils.synthesizeKey("KEY_Tab");
+ await focused;
+ ok(true, "Printer picker focused after tab");
+
+ const lastButtonId =
+ AppConstants.platform == "win" ? "cancel-button" : "print-button";
+ const lastButton = helper.doc.getElementById(lastButtonId);
+
+ focused = BrowserTestUtils.waitForEvent(lastButton, "focus");
+ lastButton.focus();
+ await focused;
+ ok(true, "Last button focused");
+
+ focused = BrowserTestUtils.waitForEvent(gNavToolbox, "focus", true);
+ EventUtils.synthesizeKey("KEY_Tab");
+ await focused;
+ ok(true, "Toolbox focused after tab");
+
+ focused = BrowserTestUtils.waitForEvent(lastButton, "focus");
+ EventUtils.synthesizeKey("KEY_Tab", { shiftKey: true });
+ await focused;
+ ok(true, "Last button focused after shift+tab");
+
+ await helper.withClosingFn(() => {
+ EventUtils.synthesizeKey("VK_ESCAPE", {});
+ });
+
+ helper.assertDialogClosed();
+ });
+});
+
+async function testPrintWithEnter(testFn, filename) {
+ await PrintHelper.withTestPageHTTPS(async helper => {
+ await helper.startPrint();
+
+ let file = helper.mockFilePicker(filename);
+ await testFn(helper);
+ await helper.assertPrintToFile(file, () => {
+ EventUtils.sendKey("return", helper.win);
+ const cancelButton = helper.doc.querySelector(`button[name="cancel"]`);
+ ok(!cancelButton.disabled, "Cancel button is not disabled");
+ const printButton = helper.doc.querySelector(`button[name="print"]`);
+ ok(printButton.disabled, "Print button is disabled");
+ });
+ });
+}
+
+add_task(async function testEnterAfterLoadPrints() {
+ info("Test print without moving focus");
+ await testPrintWithEnter(() => {}, "print_initial_focus.pdf");
+});
+
+add_task(async function testEnterPrintsFromPageRangeSelect() {
+ info("Test print from page range select");
+ await testPrintWithEnter(helper => {
+ let pageRangePicker = helper.get("range-picker");
+ pageRangePicker.focus();
+ is(
+ helper.doc.activeElement,
+ pageRangePicker,
+ "Page range select is focused"
+ );
+ }, "print_page_range_select.pdf");
+});
+
+add_task(async function testEnterPrintsFromOrientation() {
+ info("Test print on Enter from focused orientation input");
+ await testPrintWithEnter(helper => {
+ let portrait = helper.get("portrait");
+ portrait.focus();
+ is(helper.doc.activeElement, portrait, "Portrait is focused");
+ }, "print_orientation_focused.pdf");
+});
+
+add_task(async function testPrintOnNewWindowDoesntClose() {
+ info("Test that printing doesn't close a window with a single tab");
+ let win = await BrowserTestUtils.openNewBrowserWindow();
+
+ await PrintHelper.withTestPageHTTPS(async helper => {
+ await helper.startPrint();
+ let file = helper.mockFilePicker("print_new_window_close.pdf");
+ await helper.assertPrintToFile(file, () => {
+ EventUtils.sendKey("return", helper.win);
+ });
+ });
+ ok(!win.closed, "Shouldn't be closed");
+ await BrowserTestUtils.closeWindow(win);
+ await SpecialPowers.popPrefEnv();
+});
+
+add_task(async function testPrintProgressIndicator() {
+ await PrintHelper.withTestPageHTTPS(async helper => {
+ await helper.startPrint();
+
+ helper.setupMockPrint();
+
+ let progressIndicator = helper.get("print-progress");
+ ok(progressIndicator.hidden, "Progress indicator is hidden");
+
+ let indicatorShown = BrowserTestUtils.waitForAttributeRemoval(
+ "hidden",
+ progressIndicator
+ );
+ helper.click(helper.get("print-button"));
+ await indicatorShown;
+
+ ok(!progressIndicator.hidden, "Progress indicator is shown on print start");
+
+ await helper.withClosingFn(async () => {
+ await helper.resolvePrint();
+ });
+ });
+});
+
+add_task(async function testPageSizePortrait() {
+ await PrintHelper.withTestPageHTTPS(async helper => {
+ await helper.startPrint();
+
+ let orientation = helper.get("orientation");
+ ok(orientation.hidden, "Orientation selector is hidden");
+
+ is(
+ helper.settings.orientation,
+ Ci.nsIPrintSettings.kPortraitOrientation,
+ "Orientation set to portrait"
+ );
+ }, "file_portrait.html");
+});
+
+add_task(async function testPageSizeLandscape() {
+ await PrintHelper.withTestPageHTTPS(async helper => {
+ await helper.startPrint();
+
+ let orientation = helper.get("orientation");
+ ok(orientation.hidden, "Orientation selector is hidden");
+
+ is(
+ helper.settings.orientation,
+ Ci.nsIPrintSettings.kLandscapeOrientation,
+ "Orientation set to landscape"
+ );
+ }, "file_landscape.html");
+});
+
+add_task(async function testFirstPageSizePortrait() {
+ await PrintHelper.withTestPageHTTPS(async helper => {
+ await helper.startPrint();
+
+ let orientation = helper.get("orientation");
+ ok(orientation.hidden, "Orientation selector is hidden");
+
+ is(
+ helper.settings.orientation,
+ Ci.nsIPrintSettings.kPortraitOrientation,
+ "Orientation set to portrait"
+ );
+ }, "file_first_portrait.html");
+});
+
+add_task(async function testFirstPageSizeLandscape() {
+ await PrintHelper.withTestPageHTTPS(async helper => {
+ await helper.startPrint();
+
+ let orientation = helper.get("orientation");
+ ok(orientation.hidden, "Orientation selector is hidden");
+
+ is(
+ helper.settings.orientation,
+ Ci.nsIPrintSettings.kLandscapeOrientation,
+ "Orientation set to landscape"
+ );
+ }, "file_first_landscape.html");
+});