1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
const frameSource =
"<a href='about:mozilla'>some text</a><a id='other' href='about:about'>other text</a>";
const sources = [
`<html><iframe id="f" srcdoc="${frameSource}"></iframe></html>`,
`<html><iframe id="f" src="https://example.com/document-builder.sjs?html=${frameSource}"></iframe></html>`,
];
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();
});
});
|