<?xml version="1.0"?> <?xml-stylesheet type="text/css" href="chrome://global/skin"?> <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=396024 --> <window title="Mozilla Bug 396024" onload="run()" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <iframe id="i" src="about:blank" type="content"></iframe> <iframe src="about:blank" type="content"></iframe> <script type="application/javascript"> <![CDATA[ var is = window.opener.wrappedJSObject.is; var ok = window.opener.wrappedJSObject.ok; var todo = window.opener.wrappedJSObject.todo; var SimpleTest = window.opener.wrappedJSObject.SimpleTest; var gWbp; function printpreview() { gWbp = window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIWebBrowserPrint); var listener = { onLocationChange: function(webProgress, request, location, flags) { }, onProgressChange: function(webProgress, request, curSelfProgress, maxSelfProgress, curTotalProgress, maxTotalProgress) { }, onSecurityChange: function(webProgress, request, state) { }, onStateChange: function(webProgress, request, stateFlags, status) { }, onStatusChange: function(webProgress, request, status, message) { }, QueryInterface: function(iid) { if (iid.equals(Components.interfaces.nsIWebProgressListener) || iid.equals(Components.interfaces.nsISupportsWeakReference)) return this; throw Components.results.NS_NOINTERFACE; } } var prefs = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefBranch); prefs.setBoolPref('print.show_print_progress', false); //XXX I would have thought this would work, instead I'm forced to use prefs service gWbp.globalPrintSettings.showPrintProgress = false; gWbp.printPreview(gWbp.globalPrintSettings, window.frames[0], listener); prefs.clearUserPref('print.show_print_progress'); } function exitprintpreview() { window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIWebBrowserPrint).exitPrintPreview(); } function finish() { SimpleTest.finish(); window.close(); } function run() { /** Test for Bug 396024 **/ var printService = Components.classes["@mozilla.org/gfx/printsettings-service;1"] .getService(Components.interfaces.nsIPrintSettingsService); try { Components.classes["@mozilla.org/gfx/printerenumerator;1"] .getService(Components.interfaces.nsIPrinterEnumerator); } catch(e) { todo(false, "Test skipped on MacOSX, as the print preview code doesn't work there"); finish(); return; } if (printService.defaultPrinterName != '') { printpreview(); ok(gWbp.doingPrintPreview, "Should be doing print preview"); exitprintpreview(); ok(!gWbp.doingPrintPreview, "Should not be doing print preview anymore1"); printpreview(); setTimeout(run2, 0) } else { todo(false, "No printer seems installed on this machine, that is necessary for this test"); finish(); } } function run2() { var loadhandler = function() { document.getElementById("i").removeEventListener("load", arguments.callee, true); setTimeout(run3, 0); }; document.getElementById("i").addEventListener("load", loadhandler, true); window.frames[0].location.reload(); } function run3() { gWbp = window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIWebBrowserPrint); ok(gWbp.doingPrintPreview, "Should be doing print preview"); exitprintpreview(); setTimeout(run4, 0); } function run4() { var i = document.getElementById("i"); var x = i.parentNode.removeChild(i); var loadhandler = function() { document.getElementById("i").removeEventListener("load", loadhandler, true); setTimeout(run5, 0); }; x.addEventListener("load", loadhandler, true); document.documentElement.getBoundingClientRect(); document.documentElement.appendChild(x); gWbp = window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIWebBrowserPrint); ok(!gWbp.doingPrintPreview, "Should not be doing print preview anymore2"); } function run5() { //XXX this shouldn't be necessary, see bug 405555 printpreview(); exitprintpreview(); finish(); //should not have crashed after all of this } ]]></script> </window>