|
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> |