summaryrefslogtreecommitdiffstats
path: root/toolkit/components/printing/tests/browser_window_print.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/printing/tests/browser_window_print.js')
-rw-r--r--toolkit/components/printing/tests/browser_window_print.js189
1 files changed, 189 insertions, 0 deletions
diff --git a/toolkit/components/printing/tests/browser_window_print.js b/toolkit/components/printing/tests/browser_window_print.js
new file mode 100644
index 0000000000..49a4485ef1
--- /dev/null
+++ b/toolkit/components/printing/tests/browser_window_print.js
@@ -0,0 +1,189 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const TEST_PATH = getRootDirectory(gTestPath).replace(
+ "chrome://mochitests/content",
+ "https://example.com"
+);
+
+add_task(async function test_print_blocks() {
+ // window.print() only shows print preview when print.tab_modal.enabled is
+ // true.
+ await SpecialPowers.pushPrefEnv({
+ set: [["print.tab_modal.enabled", true]],
+ });
+
+ is(
+ document.querySelector(".printPreviewBrowser"),
+ null,
+ "There shouldn't be any print preview browser"
+ );
+
+ await BrowserTestUtils.withNewTab(
+ `${TEST_PATH}file_window_print.html`,
+ async function(browser) {
+ info(
+ "Waiting for the first window.print() to run and ensure we're showing the preview..."
+ );
+
+ await BrowserTestUtils.waitForCondition(
+ () => !!document.querySelector(".printPreviewBrowser")
+ );
+
+ {
+ let [before, afterFirst] = await SpecialPowers.spawn(
+ browser,
+ [],
+ () => {
+ return [
+ !!content.document.getElementById("before-print"),
+ !!content.document.getElementById("after-first-print"),
+ ];
+ }
+ );
+
+ ok(before, "Content before printing should be in the DOM");
+ ok(!afterFirst, "Shouldn't have returned yet from window.print()");
+ }
+
+ gBrowser.getTabDialogBox(browser).abortAllDialogs();
+
+ await BrowserTestUtils.waitForCondition(
+ () => !!document.querySelector(".printPreviewBrowser")
+ );
+
+ {
+ let [before, afterFirst, afterSecond] = await SpecialPowers.spawn(
+ browser,
+ [],
+ () => {
+ return [
+ !!content.document.getElementById("before-print"),
+ !!content.document.getElementById("after-first-print"),
+ !!content.document.getElementById("after-second-print"),
+ ];
+ }
+ );
+
+ ok(before, "Content before printing should be in the DOM");
+ ok(afterFirst, "Should be in the second print already");
+ ok(afterSecond, "Shouldn't have blocked if we have mozPrintCallbacks");
+ }
+ }
+ );
+});
+
+add_task(async function test_print_delayed_during_load() {
+ // window.print() only shows print preview when print.tab_modal.enabled is
+ // true.
+ await SpecialPowers.pushPrefEnv({
+ set: [["print.tab_modal.enabled", true]],
+ });
+
+ is(
+ document.querySelector(".printPreviewBrowser"),
+ null,
+ "There shouldn't be any print preview browser"
+ );
+
+ await BrowserTestUtils.withNewTab(
+ `${TEST_PATH}file_window_print_delayed_during_load.html`,
+ async function(browser) {
+ info(
+ "Waiting for the first window.print() to run and ensure we're showing the preview..."
+ );
+
+ await BrowserTestUtils.waitForCondition(
+ () => !!document.querySelector(".printPreviewBrowser")
+ );
+
+ // The print dialog is open, should be open after onload.
+ {
+ let duringLoad = await SpecialPowers.spawn(browser, [], () => {
+ return !!content.document.getElementById("added-during-load");
+ });
+ ok(duringLoad, "Print should've been delayed");
+ }
+
+ gBrowser.getTabDialogBox(browser).abortAllDialogs();
+
+ is(typeof browser.isConnected, "boolean");
+ await BrowserTestUtils.waitForCondition(() => !browser.isConnected);
+ ok(true, "Tab should've been closed after printing");
+ }
+ );
+});
+
+add_task(async function test_print_on_sandboxed_frame() {
+ // window.print() only shows print preview when print.tab_modal.enabled is
+ // true.
+ await SpecialPowers.pushPrefEnv({
+ set: [["print.tab_modal.enabled", true]],
+ });
+
+ is(
+ document.querySelector(".printPreviewBrowser"),
+ null,
+ "There shouldn't be any print preview browser"
+ );
+
+ await BrowserTestUtils.withNewTab(
+ `${TEST_PATH}file_window_print_sandboxed_iframe.html`,
+ async function(browser) {
+ info(
+ "Waiting for the first window.print() to run and ensure we're showing the preview..."
+ );
+
+ await BrowserTestUtils.waitForCondition(
+ () => !!document.querySelector(".printPreviewBrowser")
+ );
+
+ isnot(
+ document.querySelector(".printPreviewBrowser"),
+ null,
+ "Should open the print preview correctly"
+ );
+ gBrowser.getTabDialogBox(browser).abortAllDialogs();
+ }
+ );
+});
+
+add_task(async function test_focused_browsing_context() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["print.tab_modal.enabled", true]],
+ });
+
+ await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ `${TEST_PATH}longerArticle.html`
+ );
+
+ let tabCount = gBrowser.tabs.length;
+ document.getElementById("cmd_newNavigatorTab").doCommand();
+ await TestUtils.waitForCondition(() => gBrowser.tabs.length == tabCount + 1);
+ let newTabBrowser = gBrowser.selectedBrowser;
+ is(newTabBrowser.documentURI.spec, "about:newtab", "newtab is loaded");
+
+ let menuButton = document.getElementById("PanelUI-menu-button");
+ menuButton.click();
+ await BrowserTestUtils.waitForEvent(window.PanelUI.mainView, "ViewShown");
+ document.getElementById("appMenu-print-button").click();
+
+ let dialog = await TestUtils.waitForCondition(
+ () =>
+ gBrowser
+ .getTabDialogBox(newTabBrowser)
+ .getTabDialogManager()
+ ._dialogs.find(dlg => dlg._box.querySelector(".printSettingsBrowser")),
+ "Wait for dialog"
+ );
+ await dialog._dialogReady;
+ ok(dialog, "Dialog is available");
+ await dialog._frame.contentWindow._initialized;
+ await dialog.close();
+
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});