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; }
nsresult PrintingParent::SerializeAndEnsureRemotePrintJob( nsIPrintSettings* aPrintSettings, nsIWebProgressListener* aListener, layout::RemotePrintJobParent* aRemotePrintJob, PrintData* aPrintData) { MOZ_ASSERT(aPrintData); nsresult rv; nsCOMPtr<nsIPrintSettings> printSettings; if (aPrintSettings) { printSettings = aPrintSettings; } else { rv = mPrintSettingsSvc->GetNewPrintSettings(getter_AddRefs(printSettings)); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } } rv = mPrintSettingsSvc->SerializeToPrintData(aPrintSettings, nullptr, aPrintData); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } RemotePrintJobParent* remotePrintJob; if (aRemotePrintJob) { remotePrintJob = aRemotePrintJob; aPrintData->remotePrintJobParent() = remotePrintJob; } else { remotePrintJob = new RemotePrintJobParent(aPrintSettings); aPrintData->remotePrintJobParent() = SendPRemotePrintJobConstructor(remotePrintJob); } if (aListener) { remotePrintJob->RegisterListener(aListener); } return NS_OK; }