diff --git a/layout/printing/nsPrintEngine.cpp b/layout/printing/nsPrintEngine.cpp index 291d53a97032..8cea7d8c9a47 100644 --- a/layout/printing/nsPrintEngine.cpp +++ b/layout/printing/nsPrintEngine.cpp @@ -729,6 +729,20 @@ nsPrintEngine::PrintPreview(nsIPrintSettings* aPrintSettings, nsIDOMWindow *aChildDOMWin, nsIWebProgressListener* aWebProgressListener) { + // Get the DocShell and see if it is busy + // (We can't Print Preview this document if it is still busy) + nsCOMPtr docShell(do_QueryInterface(mContainer)); + NS_ASSERTION(docShell, "This has to be a docshell"); + + PRUint32 busyFlags = nsIDocShell::BUSY_FLAGS_NONE; + if (NS_FAILED(docShell->GetBusyFlags(&busyFlags)) || + busyFlags != nsIDocShell::BUSY_FLAGS_NONE) { + CloseProgressDialog(aWebProgressListener); + ShowPrintErrorDialog(NS_ERROR_GFX_PRINTER_DOC_IS_BUSY_PP, PR_FALSE); + return NS_ERROR_FAILURE; + } + + // Document is not busy -- go ahead with the Print Preview return CommonPrint(PR_TRUE, aPrintSettings, aWebProgressListener); }