/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ const frameSource = "some textother text"; const sources = [ ``, ``, ]; async function getPreviewText(previewBrowser) { return SpecialPowers.spawn(previewBrowser, [], function() { return content.document.body.textContent; }); } add_task(async function print_selection() { let i = 0; for (let source of sources) { // Testing the native print dialog is much harder. // Note we need to do this from here since resetPrintPrefs() below clears // out the pref. 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( "data:text/html," + source, async function(browser) { let frameBC = browser.browsingContext.children[0]; await SpecialPowers.spawn(frameBC, [], () => { let element = content.document.getElementById("other"); content.focus(); content.getSelection().selectAllChildren(element); }); let helper = new PrintHelper(browser); // If you change this, change nsContextMenu.printSelection() too. PrintUtils.startPrintWindow("tests", frameBC, { printSelectionOnly: true, }); await BrowserTestUtils.waitForCondition( () => !!document.querySelector(".printPreviewBrowser") ); let previewBrowser = document.querySelector( ".printPreviewBrowser[previewtype='selection']" ); let previewText = () => getPreviewText(previewBrowser); // The preview process is async, wait for it to not be empty. let textContent = await TestUtils.waitForCondition(previewText); is(textContent, "other text", "Correct content loaded"); let printSelect = document .querySelector(".printSettingsBrowser") .contentDocument.querySelector("#print-selection-enabled"); ok(!printSelect.hidden, "Print selection checkbox is shown"); ok(printSelect.checked, "Print selection checkbox is checked"); let file = helper.mockFilePicker(`browser_print_selection-${i++}.pdf`); await helper.assertPrintToFile(file, () => { helper.click(helper.get("print-button")); }); PrintHelper.resetPrintPrefs(); } ); } }); add_task(async function no_print_selection() { // Ensures the print selection checkbox is hidden if nothing is selected await PrintHelper.withTestPage(async helper => { await helper.startPrint(); await helper.openMoreSettings(); let printSelect = helper.get("print-selection-container"); ok(printSelect.hidden, "Print selection checkbox is hidden"); await helper.closeDialog(); }); }); add_task(async function print_selection_switch() { await PrintHelper.withTestPage(async helper => { await SpecialPowers.spawn(helper.sourceBrowser, [], async function() { let element = content.document.querySelector("h1"); content.window.getSelection().selectAllChildren(element); }); await helper.startPrint(); await helper.openMoreSettings(); let printSelect = helper.get("print-selection-container"); ok(!printSelect.checked, "Print selection checkbox is not checked"); let selectionBrowser = document.querySelector( ".printPreviewBrowser[previewtype='selection']" ); let primaryBrowser = document.querySelector( ".printPreviewBrowser[previewtype='primary']" ); let selectedText = "Article title"; let fullText = await getPreviewText(primaryBrowser); function getCurrentBrowser(previewType) { let browser = previewType == "selection" ? selectionBrowser : primaryBrowser; is( browser.parentElement.getAttribute("previewtype"), previewType, "Expected browser is showing" ); return browser; } helper.assertSettingsMatch({ printSelectionOnly: false, }); is( selectionBrowser.parentElement.getAttribute("previewtype"), "primary", "Print selection browser is not shown" ); await helper.assertSettingsChanged( { printSelectionOnly: false }, { printSelectionOnly: true }, async () => { await helper.waitForPreview(() => helper.click(printSelect)); let text = await getPreviewText(getCurrentBrowser("selection")); is(text, selectedText, "Correct content loaded"); } ); await helper.assertSettingsChanged( { printSelectionOnly: true }, { printSelectionOnly: false }, async () => { await helper.waitForPreview(() => helper.click(printSelect)); let previewType = selectionBrowser.parentElement.getAttribute( "previewtype" ); is(previewType, "primary", "Print selection browser is not shown"); let text = await getPreviewText(getCurrentBrowser(previewType)); is(text, fullText, "Correct content loaded"); } ); await helper.closeDialog(); }); });