diff options
Diffstat (limited to 'toolkit/components/printing/tests/browser_window_print.js')
-rw-r--r-- | toolkit/components/printing/tests/browser_window_print.js | 189 |
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); +}); |