layout/base/tests/chrome/printpreview_bug396024_helper.xul

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:a8b96a0ab5e1
1 <?xml version="1.0"?>
2 <?xml-stylesheet type="text/css" href="chrome://global/skin"?>
3 <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
4 type="text/css"?>
5 <!--
6 https://bugzilla.mozilla.org/show_bug.cgi?id=396024
7 -->
8 <window title="Mozilla Bug 396024" onload="run()"
9 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
10 <iframe id="i" src="about:blank" type="content"></iframe>
11 <iframe src="about:blank" type="content"></iframe>
12 <script type="application/javascript">
13 <![CDATA[
14 var is = window.opener.wrappedJSObject.is;
15 var ok = window.opener.wrappedJSObject.ok;
16 var todo = window.opener.wrappedJSObject.todo;
17 var SimpleTest = window.opener.wrappedJSObject.SimpleTest;
18 var gWbp;
19 function printpreview() {
20 gWbp = window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor)
21 .getInterface(Components.interfaces.nsIWebBrowserPrint);
22 var listener = {
23 onLocationChange: function(webProgress, request, location, flags) { },
24 onProgressChange: function(webProgress, request, curSelfProgress,
25 maxSelfProgress, curTotalProgress,
26 maxTotalProgress) { },
27 onSecurityChange: function(webProgress, request, state) { },
28 onStateChange: function(webProgress, request, stateFlags, status) { },
29 onStatusChange: function(webProgress, request, status, message) { },
30 QueryInterface: function(iid) {
31 if (iid.equals(Components.interfaces.nsIWebProgressListener) ||
32 iid.equals(Components.interfaces.nsISupportsWeakReference))
33 return this;
34 throw Components.results.NS_NOINTERFACE;
35 }
36 }
37 var prefs = Components.classes["@mozilla.org/preferences-service;1"]
38 .getService(Components.interfaces.nsIPrefBranch);
39 prefs.setBoolPref('print.show_print_progress', false);
40 //XXX I would have thought this would work, instead I'm forced to use prefs service
41 gWbp.globalPrintSettings.showPrintProgress = false;
42 gWbp.printPreview(gWbp.globalPrintSettings, window.frames[0], listener);
43 prefs.clearUserPref('print.show_print_progress');
44 }
45
46 function exitprintpreview() {
47 window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor)
48 .getInterface(Components.interfaces.nsIWebBrowserPrint).exitPrintPreview();
49 }
50
51 function finish() {
52 SimpleTest.finish();
53 window.close();
54 }
55
56 function run()
57 {
58 /** Test for Bug 396024 **/
59 var printService = Components.classes["@mozilla.org/gfx/printsettings-service;1"]
60 .getService(Components.interfaces.nsIPrintSettingsService);
61
62 try {
63 Components.classes["@mozilla.org/gfx/printerenumerator;1"]
64 .getService(Components.interfaces.nsIPrinterEnumerator);
65 } catch(e) {
66 todo(false, "Test skipped on MacOSX, as the print preview code doesn't work there");
67 finish();
68 return;
69 }
70
71 if (printService.defaultPrinterName != '') {
72 printpreview();
73 ok(gWbp.doingPrintPreview, "Should be doing print preview");
74 exitprintpreview();
75 ok(!gWbp.doingPrintPreview, "Should not be doing print preview anymore1");
76 printpreview();
77 setTimeout(run2, 0)
78 } else {
79 todo(false, "No printer seems installed on this machine, that is necessary for this test");
80 finish();
81 }
82 }
83
84 function run2() {
85 var loadhandler = function() {
86 document.getElementById("i").removeEventListener("load", arguments.callee, true);
87 setTimeout(run3, 0);
88 };
89 document.getElementById("i").addEventListener("load", loadhandler, true);
90 window.frames[0].location.reload();
91 }
92
93 function run3() {
94 gWbp = window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor)
95 .getInterface(Components.interfaces.nsIWebBrowserPrint);
96 ok(gWbp.doingPrintPreview, "Should be doing print preview");
97 exitprintpreview();
98 setTimeout(run4, 0);
99 }
100
101 function run4() {
102 var i = document.getElementById("i");
103 var x = i.parentNode.removeChild(i);
104 var loadhandler = function() {
105 document.getElementById("i").removeEventListener("load", loadhandler, true);
106 setTimeout(run5, 0);
107 };
108 x.addEventListener("load", loadhandler, true);
109 document.documentElement.getBoundingClientRect();
110 document.documentElement.appendChild(x);
111 gWbp = window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor)
112 .getInterface(Components.interfaces.nsIWebBrowserPrint);
113 ok(!gWbp.doingPrintPreview, "Should not be doing print preview anymore2");
114 }
115
116 function run5() {
117 //XXX this shouldn't be necessary, see bug 405555
118 printpreview();
119 exitprintpreview();
120 finish(); //should not have crashed after all of this
121 }
122 ]]></script>
123 </window>

mercurial