bool PrintingParent::RecvShowProgress(PBrowserParent* parent, PPrintProgressDialogParent* printProgressDialog, PRemotePrintJobParent* remotePrintJob, const bool& isForPrinting, bool* notifyOnOpen, nsresult* result) { *result = NS_ERROR_FAILURE; *notifyOnOpen = false; nsCOMPtr<nsPIDOMWindowOuter> parentWin = DOMWindowFromBrowserParent(parent); if (!parentWin) { return true; } nsCOMPtr<nsIPrintingPromptService> pps(do_GetService("@mozilla.org/embedcomp/printingprompt-service;1")); if (!pps) { return true; } PrintProgressDialogParent* dialogParent = static_cast<PrintProgressDialogParent*>(printProgressDialog); nsCOMPtr<nsIObserver> observer = do_QueryInterface(dialogParent); nsCOMPtr<nsIWebProgressListener> printProgressListener; nsCOMPtr<nsIPrintProgressParams> printProgressParams; *result = pps->ShowProgress(parentWin, nullptr, nullptr, observer, isForPrinting, getter_AddRefs(printProgressListener), getter_AddRefs(printProgressParams), notifyOnOpen); NS_ENSURE_SUCCESS(*result, true); if (remotePrintJob) { // If we have a RemotePrintJob use that as a more general forwarder for // print progress listeners. static_cast<RemotePrintJobParent*>(remotePrintJob) ->RegisterListener(printProgressListener); } else { dialogParent->SetWebProgressListener(printProgressListener); } dialogParent->SetPrintProgressParams(printProgressParams); return true; }
nsresult PrintingParent::ShowPrintDialog(PBrowserParent* aParent, const PrintData& aData, PrintData* aResult) { nsCOMPtr<nsIDOMWindow> parentWin = DOMWindowFromBrowserParent(aParent); if (!parentWin) { return NS_ERROR_FAILURE; } nsCOMPtr<nsIPrintingPromptService> pps(do_GetService("@mozilla.org/embedcomp/printingprompt-service;1")); if (!pps) { return NS_ERROR_FAILURE; } // The initSettings we got can be wrapped using // PrintDataUtils' MockWebBrowserPrint, which implements enough of // nsIWebBrowserPrint to keep the dialogs happy. nsCOMPtr<nsIWebBrowserPrint> wbp = new MockWebBrowserPrint(aData); nsresult rv; nsCOMPtr<nsIPrintOptions> po = do_GetService("@mozilla.org/gfx/printsettings-service;1", &rv); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIPrintSettings> settings; rv = po->CreatePrintSettings(getter_AddRefs(settings)); NS_ENSURE_SUCCESS(rv, rv); rv = po->DeserializeToPrintSettings(aData, settings); NS_ENSURE_SUCCESS(rv, rv); rv = pps->ShowPrintDialog(parentWin, wbp, settings); NS_ENSURE_SUCCESS(rv, rv); // And send it back. rv = po->SerializeToPrintData(settings, nullptr, aResult); PRemotePrintJobParent* remotePrintJob = new RemotePrintJobParent(settings); aResult->remotePrintJobParent() = SendPRemotePrintJobConstructor(remotePrintJob); return rv; }
bool PrintingParent::RecvShowProgress(PBrowserParent* parent, PPrintProgressDialogParent* printProgressDialog, const bool& isForPrinting, bool* notifyOnOpen, nsresult* result) { *result = NS_ERROR_FAILURE; *notifyOnOpen = false; nsCOMPtr<nsIDOMWindow> parentWin = DOMWindowFromBrowserParent(parent); if (!parentWin) { return true; } nsCOMPtr<nsIPrintingPromptService> pps(do_GetService("@mozilla.org/embedcomp/printingprompt-service;1")); if (!pps) { return true; } PrintProgressDialogParent* dialogParent = static_cast<PrintProgressDialogParent*>(printProgressDialog); nsCOMPtr<nsIObserver> observer = do_QueryInterface(dialogParent); nsCOMPtr<nsIWebProgressListener> printProgressListener; nsCOMPtr<nsIPrintProgressParams> printProgressParams; *result = pps->ShowProgress(parentWin, nullptr, nullptr, observer, isForPrinting, getter_AddRefs(printProgressListener), getter_AddRefs(printProgressParams), notifyOnOpen); NS_ENSURE_SUCCESS(*result, true); dialogParent->SetWebProgressListener(printProgressListener); dialogParent->SetPrintProgressParams(printProgressParams); return true; }
nsresult PrintingParent::ShowPrintDialog(PBrowserParent* aParent, const PrintData& aData, PrintData* aResult) { nsCOMPtr<nsPIDOMWindowOuter> parentWin = DOMWindowFromBrowserParent(aParent); if (!parentWin) { return NS_ERROR_FAILURE; } nsCOMPtr<nsIPrintingPromptService> pps(do_GetService("@mozilla.org/embedcomp/printingprompt-service;1")); if (!pps) { return NS_ERROR_FAILURE; } // The initSettings we got can be wrapped using // PrintDataUtils' MockWebBrowserPrint, which implements enough of // nsIWebBrowserPrint to keep the dialogs happy. nsCOMPtr<nsIWebBrowserPrint> wbp = new MockWebBrowserPrint(aData); nsCOMPtr<nsIPrintSettings> settings; nsresult rv = mPrintSettingsSvc->GetNewPrintSettings(getter_AddRefs(settings)); NS_ENSURE_SUCCESS(rv, rv); rv = mPrintSettingsSvc->DeserializeToPrintSettings(aData, settings); NS_ENSURE_SUCCESS(rv, rv); rv = pps->ShowPrintDialog(parentWin, wbp, settings); NS_ENSURE_SUCCESS(rv, rv); // Serialize back to aResult. Use the existing RemotePrintJob if we have one // otherwise SerializeAndEnsureRemotePrintJob() will create a new one. RemotePrintJobParent* remotePrintJob = static_cast<RemotePrintJobParent*>(aData.remotePrintJobParent()); rv = SerializeAndEnsureRemotePrintJob(settings, nullptr, remotePrintJob, aResult); return rv; }
nsresult PrintingParent::ShowPrintDialog(PBrowserParent* aParent, const PrintData& aData, PrintData* aResult) { // If aParent is null this call is just being used to get print settings from // the printer for print preview. bool isPrintPreview = !aParent; nsCOMPtr<nsPIDOMWindowOuter> parentWin; if (aParent) { parentWin = DOMWindowFromBrowserParent(aParent); if (!parentWin) { return NS_ERROR_FAILURE; } } nsCOMPtr<nsIPrintingPromptService> pps(do_GetService("@mozilla.org/embedcomp/printingprompt-service;1")); if (!pps) { return NS_ERROR_FAILURE; } // The initSettings we got can be wrapped using // PrintDataUtils' MockWebBrowserPrint, which implements enough of // nsIWebBrowserPrint to keep the dialogs happy. nsCOMPtr<nsIWebBrowserPrint> wbp = new MockWebBrowserPrint(aData); // Use the existing RemotePrintJob and its settings, if we have one, to make // sure they stay current. RemotePrintJobParent* remotePrintJob = static_cast<RemotePrintJobParent*>(aData.remotePrintJobParent()); nsCOMPtr<nsIPrintSettings> settings; nsresult rv; if (remotePrintJob) { settings = remotePrintJob->GetPrintSettings(); } else { rv = mPrintSettingsSvc->GetNewPrintSettings(getter_AddRefs(settings)); NS_ENSURE_SUCCESS(rv, rv); } // We only want to use the print silently setting from the parent. bool printSilently; rv = settings->GetPrintSilent(&printSilently); NS_ENSURE_SUCCESS(rv, rv); rv = mPrintSettingsSvc->DeserializeToPrintSettings(aData, settings); NS_ENSURE_SUCCESS(rv, rv); rv = settings->SetPrintSilent(printSilently); NS_ENSURE_SUCCESS(rv, rv); // If this is for print preview or we are printing silently then we just need // to initialize the print settings with anything specific from the printer. if (isPrintPreview || printSilently || Preferences::GetBool("print.always_print_silent", printSilently)) { nsXPIDLString printerName; rv = settings->GetPrinterName(getter_Copies(printerName)); NS_ENSURE_SUCCESS(rv, rv); settings->SetIsInitializedFromPrinter(false); mPrintSettingsSvc->InitPrintSettingsFromPrinter(printerName, settings); } else { rv = pps->ShowPrintDialog(parentWin, wbp, settings); NS_ENSURE_SUCCESS(rv, rv); } if (isPrintPreview) { // For print preview we don't want a RemotePrintJob just the settings. rv = mPrintSettingsSvc->SerializeToPrintData(settings, nullptr, aResult); } else { rv = SerializeAndEnsureRemotePrintJob(settings, nullptr, remotePrintJob, aResult); } return rv; }