Bug 559705 - "ASSERTION: Subdoc frames must have an inner view too". r=roc a2.0=roc

This commit is contained in:
Mats Palmgren 2010-09-18 13:28:50 +02:00
parent 1158ded89b
commit a8e03cc0ca
4 changed files with 9 additions and 13 deletions

View File

@ -662,7 +662,7 @@ nsFrameLoader::Show(PRInt32 marginWidth, PRInt32 marginHeight,
}
}
nsIView* view = frame->CreateViewAndWidget(contentType);
nsIView* view = frame->EnsureInnerView();
if (!view)
return PR_FALSE;

View File

@ -63,6 +63,7 @@
#include "nsIStyleSheet.h"
#include "nsCSSStyleSheet.h"
#include "nsIFrame.h"
#include "nsSubDocumentFrame.h"
#include "nsILinkHandler.h"
#include "nsIDOMDocument.h"
@ -79,7 +80,6 @@
#include "nsLayoutStylesheetCache.h"
#include "nsViewsCID.h"
#include "nsWidgetsCID.h"
#include "nsIDeviceContext.h"
#include "nsIDeviceContextSpec.h"
#include "nsIViewManager.h"
@ -2416,10 +2416,9 @@ DocumentViewerImpl::FindContainerView()
// cases. Treat that as display:none, the document is not
// displayed.
if (subdocFrame->GetType() == nsGkAtoms::subDocumentFrame) {
nsIView* subdocFrameView = subdocFrame->GetView();
NS_ASSERTION(subdocFrameView, "Subdoc frames must have views");
nsIView* innerView = subdocFrameView->GetFirstChild();
NS_ASSERTION(innerView, "Subdoc frames must have an inner view too");
NS_ASSERTION(subdocFrame->GetView(), "Subdoc frames must have views");
nsIView* innerView =
static_cast<nsSubDocumentFrame*>(subdocFrame)->EnsureInnerView();
containerView = innerView;
} else {
NS_WARNING("Subdocument container has non-subdocument frame");

View File

@ -69,8 +69,6 @@ using mozilla::layout::RenderFrameParent;
#include "nsIDocument.h"
#include "nsIView.h"
#include "nsIViewManager.h"
#include "nsWidgetsCID.h"
#include "nsViewsCID.h"
#include "nsGkAtoms.h"
#include "nsStyleCoord.h"
#include "nsStyleContext.h"
@ -221,8 +219,8 @@ nsSubDocumentFrame::ShowViewer()
if (!PresContext()->IsDynamic()) {
// We let the printing code take care of loading the document; just
// create a widget for it to use
(void) CreateViewAndWidget(eContentTypeContent);
// create the inner view for it to use.
(void) EnsureInnerView();
} else {
nsRefPtr<nsFrameLoader> frameloader = FrameLoader();
if (frameloader) {
@ -1011,10 +1009,9 @@ nsSubDocumentFrame::EndSwapDocShells(nsIFrame* aOther)
}
nsIView*
nsSubDocumentFrame::CreateViewAndWidget(nsContentType aContentType)
nsSubDocumentFrame::EnsureInnerView()
{
if (mInnerView) {
// Nothing to do here
return mInnerView;
}

View File

@ -117,7 +117,7 @@ public:
nsresult GetDocShell(nsIDocShell **aDocShell);
nsresult BeginSwapDocShells(nsIFrame* aOther);
void EndSwapDocShells(nsIFrame* aOther);
nsIView* CreateViewAndWidget(nsContentType aContentType);
nsIView* EnsureInnerView();
nsIFrame* GetSubdocumentRootFrame();
// nsIReflowCallback