diff --git a/layout/base/nsDocumentViewer.cpp b/layout/base/nsDocumentViewer.cpp index 7786d87999be..14494f94d435 100644 --- a/layout/base/nsDocumentViewer.cpp +++ b/layout/base/nsDocumentViewer.cpp @@ -2934,7 +2934,9 @@ nsDocumentViewer::Print(nsIPrintSettings* aPrintSettings, } mPrintJob = printJob; - rv = printJob->Print(mDocument, aPrintSettings, aRemotePrintJob, + + // Note: mDocument was null-checked earlier in this function. + rv = printJob->Print(*mDocument, aPrintSettings, aRemotePrintJob, aWebProgressListener); if (NS_WARN_IF(NS_FAILED(rv))) { OnDonePrinting(); @@ -2979,7 +2981,8 @@ nsDocumentViewer::PrintPreview(nsIPrintSettings* aPrintSettings, } mPrintJob = printJob; - rv = printJob->PrintPreview(doc, aPrintSettings, aWebProgressListener, + // Note: doc is known-non-null via NS_ENSURE_STATE null-check above. + rv = printJob->PrintPreview(*doc, aPrintSettings, aWebProgressListener, std::move(aCallback)); if (NS_WARN_IF(NS_FAILED(rv))) { OnDonePrinting(); diff --git a/layout/printing/nsPrintJob.cpp b/layout/printing/nsPrintJob.cpp index 1d4d591cd227..58fa97110b01 100644 --- a/layout/printing/nsPrintJob.cpp +++ b/layout/printing/nsPrintJob.cpp @@ -196,7 +196,9 @@ void nsPrintJob::BuildNestedPrintObjects( } auto childPO = MakeUnique(); - nsresult rv = childPO->Init(docShell, doc, aParentPO.get()); + // Note: docShell and doc are known-non-null at this point; they've been + // null-checked above (with null leading to 'continue' statements). + nsresult rv = childPO->Init(*docShell, *doc, aParentPO.get()); if (NS_FAILED(rv)) { MOZ_ASSERT_UNREACHABLE("Init failed?"); } @@ -343,7 +345,7 @@ static void DumpLayoutData(const char* aTitleStr, const char* aURLStr, nsresult nsPrintJob::CommonPrint(bool aIsPrintPreview, nsIPrintSettings* aPrintSettings, nsIWebProgressListener* aWebProgressListener, - Document* aSourceDoc) { + Document& aSourceDoc) { // Callers must hold a strong reference to |this| to ensure that we stay // alive for the duration of this method, because our main owning reference // (on nsDocumentViewer) might be cleared during this function (if we cause @@ -370,8 +372,8 @@ nsresult nsPrintJob::CommonPrint(bool aIsPrintPreview, nsresult nsPrintJob::DoCommonPrint(bool aIsPrintPreview, nsIPrintSettings* aPrintSettings, nsIWebProgressListener* aWebProgressListener, - Document* aDoc) { - MOZ_ASSERT(aDoc->IsStaticDocument()); + Document& aDoc) { + MOZ_ASSERT(aDoc.IsStaticDocument()); nsresult rv; @@ -411,7 +413,9 @@ nsresult nsPrintJob::DoCommonPrint(bool aIsPrintPreview, { nsAutoScriptBlocker scriptBlocker; mPrintObject = MakeUnique(); - rv = mPrintObject->Init(docShell, aDoc); + // Note: docShell is implicitly non-null via do_QueryReferent necessarily + // having succeeded (if we got here). + rv = mPrintObject->Init(*docShell, aDoc); NS_ENSURE_SUCCESS(rv, rv); mPrintDocList.AppendElement(mPrintObject.get()); @@ -469,14 +473,14 @@ nsresult nsPrintJob::DoCommonPrint(bool aIsPrintPreview, } //--------------------------------------------------------------------------------- -nsresult nsPrintJob::Print(Document* aDoc, nsIPrintSettings* aPrintSettings, +nsresult nsPrintJob::Print(Document& aDoc, nsIPrintSettings* aPrintSettings, RemotePrintJobChild* aRemotePrintJob, nsIWebProgressListener* aWebProgressListener) { mRemotePrintJob = aRemotePrintJob; return CommonPrint(false, aPrintSettings, aWebProgressListener, aDoc); } -nsresult nsPrintJob::PrintPreview(Document* aDoc, +nsresult nsPrintJob::PrintPreview(Document& aDoc, nsIPrintSettings* aPrintSettings, nsIWebProgressListener* aWebProgressListener, PrintPreviewResolver&& aCallback) { diff --git a/layout/printing/nsPrintJob.h b/layout/printing/nsPrintJob.h index 37ab736e8ce2..91158be72408 100644 --- a/layout/printing/nsPrintJob.h +++ b/layout/printing/nsPrintJob.h @@ -99,7 +99,7 @@ class nsPrintJob final : public nsIWebProgressListener, * PrintPreview calls. */ MOZ_CAN_RUN_SCRIPT_BOUNDARY nsresult - Print(Document* aSourceDoc, nsIPrintSettings* aPrintSettings, + Print(Document& aSourceDoc, nsIPrintSettings* aPrintSettings, RemotePrintJobChild* aRemotePrintJob, nsIWebProgressListener* aWebProgressListener); @@ -114,7 +114,7 @@ class nsPrintJob final : public nsIWebProgressListener, * is actually our docViewer's current document! */ MOZ_CAN_RUN_SCRIPT_BOUNDARY nsresult - PrintPreview(Document* aSourceDoc, nsIPrintSettings* aPrintSettings, + PrintPreview(Document& aSourceDoc, nsIPrintSettings* aPrintSettings, nsIWebProgressListener* aWebProgressListener, PrintPreviewResolver&& aCallback); @@ -199,11 +199,11 @@ class nsPrintJob final : public nsIWebProgressListener, MOZ_CAN_RUN_SCRIPT nsresult CommonPrint( bool aIsPrintPreview, nsIPrintSettings* aPrintSettings, - nsIWebProgressListener* aWebProgressListener, Document* aSourceDoc); + nsIWebProgressListener* aWebProgressListener, Document& aSourceDoc); MOZ_CAN_RUN_SCRIPT nsresult DoCommonPrint( bool aIsPrintPreview, nsIPrintSettings* aPrintSettings, - nsIWebProgressListener* aWebProgressListener, Document* aSourceDoc); + nsIWebProgressListener* aWebProgressListener, Document& aSourceDoc); void FirePrintCompletionEvent(); diff --git a/layout/printing/nsPrintObject.cpp b/layout/printing/nsPrintObject.cpp index aa166c75ef63..fcf5d92fc7a4 100644 --- a/layout/printing/nsPrintObject.cpp +++ b/layout/printing/nsPrintObject.cpp @@ -49,15 +49,12 @@ nsPrintObject::~nsPrintObject() { //------------------------------------------------------------------ -nsresult nsPrintObject::Init(nsIDocShell* aDocShell, Document* aDoc, +nsresult nsPrintObject::Init(nsIDocShell& aDocShell, Document& aDoc, nsPrintObject* aParent) { - NS_ENSURE_STATE(aDocShell); - NS_ENSURE_STATE(aDoc); + MOZ_ASSERT(aDoc.IsStaticDocument()); - MOZ_ASSERT(aDoc->IsStaticDocument()); - - mDocShell = aDocShell; - mDocument = aDoc; + mDocShell = &aDocShell; + mDocument = &aDoc; if (!aParent) { // We are a root nsPrintObject. @@ -66,7 +63,7 @@ nsresult nsPrintObject::Init(nsIDocShell* aDocShell, Document* aDoc, } else { // We are a nested nsPrintObject. mParent = aParent; - nsCOMPtr window = aDoc->GetWindow(); + nsCOMPtr window = aDoc.GetWindow(); mContent = window->GetFrameElementInternal(); mFrameType = eIFrame; } diff --git a/layout/printing/nsPrintObject.h b/layout/printing/nsPrintObject.h index 26ba8f0675b4..322e3a27628e 100644 --- a/layout/printing/nsPrintObject.h +++ b/layout/printing/nsPrintObject.h @@ -36,7 +36,7 @@ class nsPrintObject final { * If aParent is nullptr (default), then this instance will be initialized as * a "root" nsPrintObject. Otherwise, this will be a "nested" nsPrintObject. */ - nsresult Init(nsIDocShell* aDocShell, mozilla::dom::Document* aDoc, + nsresult Init(nsIDocShell& aDocShell, mozilla::dom::Document& aDoc, nsPrintObject* aParent = nullptr); void DestroyPresentation();