--- a/layout/printing/nsPrintData.cpp
+++ b/layout/printing/nsPrintData.cpp
@@ -20,17 +20,17 @@
static mozilla::LazyLogModule gPrintingLog("printing");
#define PR_PL(_p1) MOZ_LOG(gPrintingLog, mozilla::LogLevel::Debug, _p1);
//---------------------------------------------------
//-- nsPrintData Class Impl
//---------------------------------------------------
nsPrintData::nsPrintData(ePrintDataType aType) :
- mType(aType), mDebugFilePtr(nullptr), mPrintObject(nullptr), mSelectedPO(nullptr),
+ mType(aType), mDebugFilePtr(nullptr), mSelectedPO(nullptr),
mPrintDocList(0), mIsIFrameSelected(false),
mIsParentAFrameSet(false), mOnStartSent(false),
mIsAborted(false), mPreparingForPrint(false), mDocWasToBeDestroyed(false),
mShrinkToFit(false), mPrintFrameType(nsIPrintSettings::kFramesAsIs),
mNumPrintablePages(0), mNumPagesPrinted(0),
mShrinkRatio(1.0), mOrigDCScale(1.0), mPPEventListeners(nullptr),
mBrandName(nullptr)
{
@@ -79,18 +79,16 @@ nsPrintData::~nsPrintData()
rv = mPrintDC->AbortDocument();
}
if (NS_FAILED(rv)) {
// XXX nsPrintData::ShowPrintErrorDialog(rv);
}
}
}
- delete mPrintObject;
-
if (mBrandName) {
free(mBrandName);
}
}
void nsPrintData::OnStartPrinting()
{
if (!mOnStartSent) {
--- a/layout/printing/nsPrintEngine.cpp
+++ b/layout/printing/nsPrintEngine.cpp
@@ -161,18 +161,18 @@ static const char * gPrintRangeStr[]
#ifdef EXTENDED_DEBUG_PRINTING
// Forward Declarations
static void DumpPrintObjectsListStart(const char * aStr, nsTArray<nsPrintObject*> * aDocList);
static void DumpPrintObjectsTree(nsPrintObject * aPO, int aLevel= 0, FILE* aFD = nullptr);
static void DumpPrintObjectsTreeLayout(nsPrintObject * aPO,nsDeviceContext * aDC, int aLevel= 0, FILE * aFD = nullptr);
#define DUMP_DOC_LIST(_title) DumpPrintObjectsListStart((_title), mPrt->mPrintDocList);
-#define DUMP_DOC_TREE DumpPrintObjectsTree(mPrt->mPrintObject);
-#define DUMP_DOC_TREELAYOUT DumpPrintObjectsTreeLayout(mPrt->mPrintObject, mPrt->mPrintDC);
+#define DUMP_DOC_TREE DumpPrintObjectsTree(mPrt->mPrintObject.get());
+#define DUMP_DOC_TREELAYOUT DumpPrintObjectsTreeLayout(mPrt->mPrintObject.get(), mPrt->mPrintDC);
#else
#define DUMP_DOC_LIST(_title)
#define DUMP_DOC_TREE
#define DUMP_DOC_TREELAYOUT
#endif
class nsScriptSuppressor
{
@@ -352,17 +352,17 @@ nsPrintEngine::GetSeqFrameAndCountPagesI
return NS_OK;
}
//-----------------------------------------------------------------
nsresult nsPrintEngine::GetSeqFrameAndCountPages(nsIFrame*& aSeqFrame, int32_t& aCount)
{
NS_ASSERTION(mPrtPreview, "mPrtPreview can't be null!");
- return GetSeqFrameAndCountPagesInternal(mPrtPreview->mPrintObject, aSeqFrame, aCount);
+ return GetSeqFrameAndCountPagesInternal(mPrtPreview->mPrintObject.get(), aSeqFrame, aCount);
}
//---------------------------------------------------------------------------------
//-- Done: Methods needed by the DocViewer
//---------------------------------------------------------------------------------
//---------------------------------------------------------------------------------
//-- Section: nsIWebBrowserPrint
@@ -508,44 +508,43 @@ nsPrintEngine::DoCommonPrint(bool
nsCOMPtr<nsIContentViewer> viewer;
webContainer->GetContentViewer(getter_AddRefs(viewer));
if (viewer && viewer->GetDocument() && viewer->GetDocument()->IsShowing()) {
viewer->GetDocument()->OnPageHide(false, nullptr);
}
}
nsAutoScriptBlocker scriptBlocker;
- mPrt->mPrintObject = new nsPrintObject();
- NS_ENSURE_TRUE(mPrt->mPrintObject, NS_ERROR_OUT_OF_MEMORY);
+ mPrt->mPrintObject = MakeUnique<nsPrintObject>();
rv = mPrt->mPrintObject->Init(webContainer, aDoc, aIsPrintPreview);
NS_ENSURE_SUCCESS(rv, rv);
- NS_ENSURE_TRUE(mPrt->mPrintDocList.AppendElement(mPrt->mPrintObject),
+ NS_ENSURE_TRUE(mPrt->mPrintDocList.AppendElement(mPrt->mPrintObject.get()),
NS_ERROR_OUT_OF_MEMORY);
mPrt->mIsParentAFrameSet = IsParentAFrameSet(webContainer);
mPrt->mPrintObject->mFrameType = mPrt->mIsParentAFrameSet ? eFrameSet : eDoc;
// Build the "tree" of PrintObjects
BuildDocTree(mPrt->mPrintObject->mDocShell, &mPrt->mPrintDocList,
- mPrt->mPrintObject);
+ mPrt->mPrintObject.get());
}
if (!aIsPrintPreview) {
SetIsPrinting(true);
}
// XXX This isn't really correct...
if (!mPrt->mPrintObject->mDocument ||
!mPrt->mPrintObject->mDocument->GetRootElement())
return NS_ERROR_GFX_PRINTER_STARTDOC;
// Create the linkage from the sub-docs back to the content element
// in the parent document
- MapContentToWebShells(mPrt->mPrintObject, mPrt->mPrintObject);
+ MapContentToWebShells(mPrt->mPrintObject.get(), mPrt->mPrintObject.get());
mPrt->mIsIFrameSelected = IsThereAnIFrameSelected(webContainer, mPrt->mCurrentFocusWin, mPrt->mIsParentAFrameSet);
// Setup print options for UI
if (mPrt->mIsParentAFrameSet) {
if (mPrt->mCurrentFocusWin) {
mPrt->mPrintSettings->SetHowToEnableFrameUI(nsIPrintSettings::kFrameEnableAll);
} else {
@@ -717,17 +716,17 @@ nsPrintEngine::DoCommonPrint(bool
}
}
} else {
mPrt->mPrintSettings->GetPrintFrameType(&mPrt->mPrintFrameType);
}
}
if (mPrt->mPrintFrameType == nsIPrintSettings::kEachFrameSep) {
- CheckForChildFrameSets(mPrt->mPrintObject);
+ CheckForChildFrameSets(mPrt->mPrintObject.get());
}
if (NS_FAILED(EnablePOsForPrinting())) {
return NS_ERROR_FAILURE;
}
// Attach progressListener to catch network requests.
nsCOMPtr<nsIWebProgress> webProgress = do_QueryInterface(mPrt->mPrintObject->mDocShell);
@@ -874,17 +873,17 @@ nsPrintEngine::GetPrintPreviewNumPages(i
// When calling this function, the FinishPrintPreview() function might not
// been called as there are still some
if (mPrtPreview) {
prt = mPrtPreview.get();
} else {
prt = mPrt.get();
}
if ((!prt) ||
- NS_FAILED(GetSeqFrameAndCountPagesInternal(prt->mPrintObject, seqFrame, *aPrintPreviewNumPages))) {
+ NS_FAILED(GetSeqFrameAndCountPagesInternal(prt->mPrintObject.get(), seqFrame, *aPrintPreviewNumPages))) {
return NS_ERROR_FAILURE;
}
return NS_OK;
}
//----------------------------------------------------------------------------------
// Enumerate all the documents for their titles
NS_IMETHODIMP
@@ -1074,17 +1073,17 @@ nsPrintEngine::ShowPrintProgress(bool aI
getter_AddRefs(mPrt->mPrintProgressParams),
&aDoNotify);
if (NS_SUCCEEDED(rv)) {
if (printProgressListener) {
mPrt->mPrintProgressListeners.AppendObject(printProgressListener);
}
if (mPrt->mPrintProgressParams) {
- SetDocAndURLIntoProgress(mPrt->mPrintObject, mPrt->mPrintProgressParams);
+ SetDocAndURLIntoProgress(mPrt->mPrintObject.get(), mPrt->mPrintProgressParams);
}
}
}
}
}
//---------------------------------------------------------------------
bool
@@ -1374,17 +1373,17 @@ nsPrintEngine::MapContentForPO(nsPrintOb
bool
nsPrintEngine::IsThereAnIFrameSelected(nsIDocShell* aDocShell,
nsPIDOMWindowOuter* aDOMWin,
bool& aIsParentFrameSet)
{
aIsParentFrameSet = IsParentAFrameSet(aDocShell);
bool iFrameIsSelected = false;
if (mPrt && mPrt->mPrintObject) {
- nsPrintObject* po = FindPrintObjectByDOMWin(mPrt->mPrintObject, aDOMWin);
+ nsPrintObject* po = FindPrintObjectByDOMWin(mPrt->mPrintObject.get(), aDOMWin);
iFrameIsSelected = po && po->mFrameType == eIFrame;
} else {
// First, check to see if we are a frameset
if (!aIsParentFrameSet) {
// Check to see if there is a currenlt focused frame
// if so, it means the selected frame is either the main docshell
// or an IFRAME
if (aDOMWin) {
@@ -1478,17 +1477,17 @@ nsPrintEngine::GetDisplayTitleAndURL(nsP
}
}
}
//---------------------------------------------------------------------
nsresult nsPrintEngine::DocumentReadyForPrinting()
{
if (mPrt->mPrintFrameType == nsIPrintSettings::kEachFrameSep) {
- CheckForChildFrameSets(mPrt->mPrintObject);
+ CheckForChildFrameSets(mPrt->mPrintObject.get());
}
//
// Send the document to the printer...
//
nsresult rv = SetupToPrintContent();
if (NS_FAILED(rv)) {
// The print job was canceled or there was a problem
@@ -1717,17 +1716,17 @@ nsPrintEngine::SetupToPrintContent()
// On some platforms The BeginDocument needs to know the name of the file.
char16_t* fileName = nullptr;
mPrt->mPrintSettings->GetToFileName(&fileName);
fileNameStr = fileName;
}
nsAutoString docTitleStr;
nsAutoString docURLStr;
- GetDisplayTitleAndURL(mPrt->mPrintObject, docTitleStr, docURLStr, eDocTitleDefURLDoc);
+ GetDisplayTitleAndURL(mPrt->mPrintObject.get(), docTitleStr, docURLStr, eDocTitleDefURLDoc);
int32_t startPage = 1;
int32_t endPage = mPrt->mNumPrintablePages;
int16_t printRangeType = nsIPrintSettings::kRangeAllPages;
mPrt->mPrintSettings->GetPrintRange(&printRangeType);
if (printRangeType == nsIPrintSettings::kRangeSpecifiedPageRange) {
mPrt->mPrintSettings->GetStartPageRange(&startPage);
@@ -1762,17 +1761,17 @@ nsPrintEngine::SetupToPrintContent()
NS_ENSURE_SUCCESS(rv, rv);
// This will print the docshell document
// when it completes asynchronously in the DonePrintingPages method
// it will check to see if there are more docshells to be printed and
// then PrintDocContent will be called again.
if (mIsDoingPrinting) {
- PrintDocContent(mPrt->mPrintObject, rv); // ignore return value
+ PrintDocContent(mPrt->mPrintObject.get(), rv); // ignore return value
}
return rv;
}
//-------------------------------------------------------
// Recursively reflow each sub-doc and then calc
// all the frame locations of the sub-docs
@@ -1817,17 +1816,17 @@ nsPrintEngine::FirePrintPreviewUpdateEve
)->RunDOMEventWhenSafe();
}
}
nsresult
nsPrintEngine::InitPrintDocConstruction(bool aHandleError)
{
nsresult rv;
- rv = ReflowDocList(mPrt->mPrintObject, DoSetPixelScale());
+ rv = ReflowDocList(mPrt->mPrintObject.get(), DoSetPixelScale());
NS_ENSURE_SUCCESS(rv, rv);
FirePrintPreviewUpdateEvent();
if (mLoadCounter == 0) {
AfterNetworkPrint(aHandleError);
}
return rv;
@@ -3057,17 +3056,17 @@ nsPrintEngine::DonePrintingPages(nsPrint
if (mPageSeqFrame.IsAlive()) {
nsIPageSequenceFrame* pageSeqFrame = do_QueryFrame(mPageSeqFrame.GetFrame());
pageSeqFrame->ResetPrintCanvasList();
}
if (aPO && !mPrt->mIsAborted) {
aPO->mHasBeenPrinted = true;
nsresult rv;
- bool didPrint = PrintDocContent(mPrt->mPrintObject, rv);
+ bool didPrint = PrintDocContent(mPrt->mPrintObject.get(), rv);
if (NS_SUCCEEDED(rv) && didPrint) {
PR_PL(("****** In DV::DonePrintingPages PO: %p (%s) didPrint:%s (Not Done Printing)\n", aPO, gFrameTypesStr[aPO->mFrameType], PRT_YESNO(didPrint)));
return false;
}
}
if (NS_SUCCEEDED(aResult)) {
FirePrintCompletionEvent();
@@ -3167,17 +3166,17 @@ nsPrintEngine::EnablePOsForPrinting()
//
// This means there are not FrameSets,
// but the document could contain an IFrame
if (printHowEnable == nsIPrintSettings::kFrameEnableNone) {
// Print all the pages or a sub range of pages
if (printRangeType == nsIPrintSettings::kRangeAllPages ||
printRangeType == nsIPrintSettings::kRangeSpecifiedPageRange) {
- SetPrintPO(mPrt->mPrintObject, true);
+ SetPrintPO(mPrt->mPrintObject.get(), true);
// Set the children so they are PrinAsIs
// In this case, the children are probably IFrames
if (mPrt->mPrintObject->mKids.Length() > 0) {
for (const UniquePtr<nsPrintObject>& po : mPrt->mPrintObject->mKids) {
NS_ASSERTION(po, "nsPrintObject can't be null!");
SetPrintAsIs(po.get());
}
@@ -3193,17 +3192,17 @@ nsPrintEngine::EnablePOsForPrinting()
// This means we are either printed a selected IFrame or
// we are printing the current selection
if (printRangeType == nsIPrintSettings::kRangeSelection) {
// If the currentFocusDOMWin can'r be null if something is selected
if (mPrt->mCurrentFocusWin) {
// Find the selected IFrame
- nsPrintObject * po = FindPrintObjectByDOMWin(mPrt->mPrintObject, mPrt->mCurrentFocusWin);
+ nsPrintObject * po = FindPrintObjectByDOMWin(mPrt->mPrintObject.get(), mPrt->mCurrentFocusWin);
if (po != nullptr) {
mPrt->mSelectedPO = po;
// Makes sure all of its children are be printed "AsIs"
SetPrintAsIs(po);
// Now, only enable this POs (the selected PO) and all of its children
SetPrintPO(po, true);
@@ -3241,17 +3240,17 @@ nsPrintEngine::EnablePOsForPrinting()
}
}
// check to see if there is a selection when a FrameSet is present
if (printRangeType == nsIPrintSettings::kRangeSelection) {
// If the currentFocusDOMWin can'r be null if something is selected
if (mPrt->mCurrentFocusWin) {
// Find the selected IFrame
- nsPrintObject * po = FindPrintObjectByDOMWin(mPrt->mPrintObject, mPrt->mCurrentFocusWin);
+ nsPrintObject * po = FindPrintObjectByDOMWin(mPrt->mPrintObject.get(), mPrt->mCurrentFocusWin);
if (po != nullptr) {
mPrt->mSelectedPO = po;
// Makes sure all of its children are be printed "AsIs"
SetPrintAsIs(po);
// Now, only enable this POs (the selected PO) and all of its children
SetPrintPO(po, true);
@@ -3272,28 +3271,28 @@ nsPrintEngine::EnablePOsForPrinting()
PR_PL(("PrintRange: %s \n", gPrintRangeStr[printRangeType]));
return NS_OK;
}
}
}
// If we are printing "AsIs" then sets all the POs to be printed as is
if (mPrt->mPrintFrameType == nsIPrintSettings::kFramesAsIs) {
- SetPrintAsIs(mPrt->mPrintObject);
- SetPrintPO(mPrt->mPrintObject, true);
+ SetPrintAsIs(mPrt->mPrintObject.get());
+ SetPrintPO(mPrt->mPrintObject.get(), true);
return NS_OK;
}
// If we are printing the selected Frame then
// find that PO for that selected DOMWin and set it all of its
// children to be printed
if (mPrt->mPrintFrameType == nsIPrintSettings::kSelectedFrame) {
if ((mPrt->mIsParentAFrameSet && mPrt->mCurrentFocusWin) || mPrt->mIsIFrameSelected) {
- nsPrintObject * po = FindPrintObjectByDOMWin(mPrt->mPrintObject, mPrt->mCurrentFocusWin);
+ nsPrintObject * po = FindPrintObjectByDOMWin(mPrt->mPrintObject.get(), mPrt->mCurrentFocusWin);
if (po != nullptr) {
mPrt->mSelectedPO = po;
// NOTE: Calling this sets the "po" and
// we don't want to do this for documents that have no children,
// because then the "DoEndPage" gets called and it shouldn't
if (po->mKids.Length() > 0) {
// Makes sure that itself, and all of its children are printed "AsIs"
SetPrintAsIs(po);
@@ -3304,17 +3303,17 @@ nsPrintEngine::EnablePOsForPrinting()
}
}
return NS_OK;
}
// If we are print each subdoc separately,
// then don't print any of the FraneSet Docs
if (mPrt->mPrintFrameType == nsIPrintSettings::kEachFrameSep) {
- SetPrintPO(mPrt->mPrintObject, true);
+ SetPrintPO(mPrt->mPrintObject.get(), true);
int32_t cnt = mPrt->mPrintDocList.Length();
for (int32_t i=0;i<cnt;i++) {
nsPrintObject* po = mPrt->mPrintDocList.ElementAt(i);
NS_ASSERTION(po, "nsPrintObject can't be null!");
if (po->mFrameType == eFrameSet) {
po->mDontPrint = true;
}
}
@@ -3903,18 +3902,18 @@ static void DumpPrintObjectsListStart(co
NS_ASSERTION(aStr, "Pointer is null!");
NS_ASSERTION(aDocList, "Pointer is null!");
PR_PL(("%s\n", aStr));
DumpPrintObjectsList(aDocList);
}
#define DUMP_DOC_LIST(_title) DumpPrintObjectsListStart((_title), mPrt->mPrintDocList);
-#define DUMP_DOC_TREE DumpPrintObjectsTree(mPrt->mPrintObject);
-#define DUMP_DOC_TREELAYOUT DumpPrintObjectsTreeLayout(mPrt->mPrintObject, mPrt->mPrintDC);
+#define DUMP_DOC_TREE DumpPrintObjectsTree(mPrt->mPrintObject.get());
+#define DUMP_DOC_TREELAYOUT DumpPrintObjectsTreeLayout(mPrt->mPrintObject.get(), mPrt->mPrintDC);
#else
#define DUMP_DOC_LIST(_title)
#define DUMP_DOC_TREE
#define DUMP_DOC_TREELAYOUT
#endif
//---------------------------------------------------------------