From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- layout/printing/nsPrintObject.cpp | 113 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 layout/printing/nsPrintObject.cpp (limited to 'layout/printing/nsPrintObject.cpp') diff --git a/layout/printing/nsPrintObject.cpp b/layout/printing/nsPrintObject.cpp new file mode 100644 index 000000000..9165374c2 --- /dev/null +++ b/layout/printing/nsPrintObject.cpp @@ -0,0 +1,113 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "nsPrintObject.h" +#include "nsIContentViewer.h" +#include "nsIDOMDocument.h" +#include "nsContentUtils.h" // for nsAutoScriptBlocker +#include "nsIInterfaceRequestorUtils.h" +#include "nsPIDOMWindow.h" +#include "nsGkAtoms.h" +#include "nsComponentManagerUtils.h" +#include "nsIDocShellTreeItem.h" +#include "nsIBaseWindow.h" +#include "nsIDocument.h" + +//--------------------------------------------------- +//-- nsPrintObject Class Impl +//--------------------------------------------------- +nsPrintObject::nsPrintObject() : + mContent(nullptr), mFrameType(eFrame), mParent(nullptr), + mHasBeenPrinted(false), mDontPrint(true), mPrintAsIs(false), + mInvisible(false), mDidCreateDocShell(false), + mShrinkRatio(1.0), mZoomRatio(1.0) +{ + MOZ_COUNT_CTOR(nsPrintObject); +} + + +nsPrintObject::~nsPrintObject() +{ + MOZ_COUNT_DTOR(nsPrintObject); + for (uint32_t i=0;i baseWin(do_QueryInterface(mDocShell)); + if (baseWin) { + baseWin->Destroy(); + } + } + mDocShell = nullptr; + mTreeOwner = nullptr; // mTreeOwner must be released after mDocShell; +} + +//------------------------------------------------------------------ +nsresult +nsPrintObject::Init(nsIDocShell* aDocShell, nsIDOMDocument* aDoc, + bool aPrintPreview) +{ + mPrintPreview = aPrintPreview; + + if (mPrintPreview || mParent) { + mDocShell = aDocShell; + } else { + mTreeOwner = do_GetInterface(aDocShell); + // Create a container docshell for printing. + mDocShell = do_CreateInstance("@mozilla.org/docshell;1"); + NS_ENSURE_TRUE(mDocShell, NS_ERROR_OUT_OF_MEMORY); + mDidCreateDocShell = true; + mDocShell->SetItemType(aDocShell->ItemType()); + mDocShell->SetTreeOwner(mTreeOwner); + } + NS_ENSURE_TRUE(mDocShell, NS_ERROR_FAILURE); + + // Keep the document related to this docshell alive + nsCOMPtr dummy = do_GetInterface(mDocShell); + mozilla::Unused << dummy; + + nsCOMPtr viewer; + mDocShell->GetContentViewer(getter_AddRefs(viewer)); + NS_ENSURE_STATE(viewer); + + nsCOMPtr doc = do_QueryInterface(aDoc); + NS_ENSURE_STATE(doc); + + if (mParent) { + nsCOMPtr window = doc->GetWindow(); + if (window) { + mContent = window->GetFrameElementInternal(); + } + mDocument = doc; + return NS_OK; + } + + mDocument = doc->CreateStaticClone(mDocShell); + nsCOMPtr clonedDOMDoc = do_QueryInterface(mDocument); + NS_ENSURE_STATE(clonedDOMDoc); + + viewer->SetDOMDocument(clonedDOMDoc); + return NS_OK; +} + +//------------------------------------------------------------------ +// Resets PO by destroying the presentation +void +nsPrintObject::DestroyPresentation() +{ + if (mPresShell) { + mPresShell->EndObservingDocument(); + nsAutoScriptBlocker scriptBlocker; + nsCOMPtr shell = mPresShell; + mPresShell = nullptr; + shell->Destroy(); + } + mPresContext = nullptr; + mViewManager = nullptr; +} + -- cgit v1.2.3