From 647e878a245eab76d031f74cce6b706f655d2b72 Mon Sep 17 00:00:00 2001 From: "Olli.Pettay%helsinki.fi" Date: Mon, 19 Feb 2007 15:26:48 +0000 Subject: [PATCH] Bug 366828, crash in venkman [@ nsContentTreeOwner::SetEnabled] p=asrail@gmail.com, r=timeless, sr=neil git-svn-id: svn://10.0.0.236/trunk@220546 18797224-902f-48f8-a5cc-f745e15eee43 --- .../xpfe/appshell/src/nsChromeTreeOwner.cpp | 54 ++++++++++++++++--- .../xpfe/appshell/src/nsContentTreeOwner.cpp | 48 +++++++++++++++-- 2 files changed, 92 insertions(+), 10 deletions(-) diff --git a/mozilla/xpfe/appshell/src/nsChromeTreeOwner.cpp b/mozilla/xpfe/appshell/src/nsChromeTreeOwner.cpp index 8b6915a3073..b98ac22d5a4 100644 --- a/mozilla/xpfe/appshell/src/nsChromeTreeOwner.cpp +++ b/mozilla/xpfe/appshell/src/nsChromeTreeOwner.cpp @@ -145,18 +145,30 @@ NS_IMETHODIMP nsChromeTreeOwner::GetInterface(const nsIID& aIID, void** aSink) { NS_ENSURE_ARG_POINTER(aSink); - if(aIID.Equals(NS_GET_IID(nsIPrompt))) + if(aIID.Equals(NS_GET_IID(nsIPrompt))) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetInterface(aIID, aSink); - if(aIID.Equals(NS_GET_IID(nsIAuthPrompt))) + } + if(aIID.Equals(NS_GET_IID(nsIAuthPrompt))) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetInterface(aIID, aSink); - if(aIID.Equals(NS_GET_IID(nsIWebBrowserChrome))) + } + if(aIID.Equals(NS_GET_IID(nsIWebBrowserChrome))) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetInterface(aIID, aSink); - if (aIID.Equals(NS_GET_IID(nsIEmbeddingSiteWindow))) + } + if (aIID.Equals(NS_GET_IID(nsIEmbeddingSiteWindow))) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetInterface(aIID, aSink); - if (aIID.Equals(NS_GET_IID(nsIEmbeddingSiteWindow2))) + } + if (aIID.Equals(NS_GET_IID(nsIEmbeddingSiteWindow2))) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetInterface(aIID, aSink); - if (aIID.Equals(NS_GET_IID(nsIXULWindow))) + } + if (aIID.Equals(NS_GET_IID(nsIXULWindow))) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->QueryInterface(aIID, aSink); + } return QueryInterface(aIID, aSink); } @@ -187,6 +199,7 @@ NS_IMETHODIMP nsChromeTreeOwner::FindItemWithName(const PRUnichar* aName, // see bug 217886 for details if(name.LowerCaseEqualsLiteral("_content") || name.EqualsLiteral("_main")) { + NS_ENSURE_STATE(mXULWindow); fIs_Content = PR_TRUE; mXULWindow->GetPrimaryContentShell(aFoundItem); if(*aFoundItem) @@ -265,12 +278,14 @@ NS_IMETHODIMP nsChromeTreeOwner::ContentShellAdded(nsIDocShellTreeItem* aContent NS_IMETHODIMP nsChromeTreeOwner::GetPrimaryContentShell(nsIDocShellTreeItem** aShell) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetPrimaryContentShell(aShell); } NS_IMETHODIMP nsChromeTreeOwner::SizeShellTo(nsIDocShellTreeItem* aShellItem, PRInt32 aCX, PRInt32 aCY) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SizeShellTo(aShellItem, aCX, aCY); } @@ -279,6 +294,7 @@ nsChromeTreeOwner::SetPersistence(PRBool aPersistPosition, PRBool aPersistSize, PRBool aPersistSizeMode) { + NS_ENSURE_STATE(mXULWindow); nsCOMPtr docShellElement; mXULWindow->GetWindowDOMElement(getter_AddRefs(docShellElement)); if (!docShellElement) @@ -316,6 +332,7 @@ nsChromeTreeOwner::GetPersistence(PRBool* aPersistPosition, PRBool* aPersistSize, PRBool* aPersistSizeMode) { + NS_ENSURE_STATE(mXULWindow); nsCOMPtr docShellElement; mXULWindow->GetWindowDOMElement(getter_AddRefs(docShellElement)); if (!docShellElement) @@ -359,48 +376,57 @@ NS_IMETHODIMP nsChromeTreeOwner::Create() NS_IMETHODIMP nsChromeTreeOwner::Destroy() { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->Destroy(); } NS_IMETHODIMP nsChromeTreeOwner::SetPosition(PRInt32 x, PRInt32 y) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetPosition(x, y); } NS_IMETHODIMP nsChromeTreeOwner::GetPosition(PRInt32* x, PRInt32* y) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetPosition(x, y); } NS_IMETHODIMP nsChromeTreeOwner::SetSize(PRInt32 cx, PRInt32 cy, PRBool fRepaint) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetSize(cx, cy, fRepaint); } NS_IMETHODIMP nsChromeTreeOwner::GetSize(PRInt32* cx, PRInt32* cy) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetSize(cx, cy); } NS_IMETHODIMP nsChromeTreeOwner::SetPositionAndSize(PRInt32 x, PRInt32 y, PRInt32 cx, PRInt32 cy, PRBool fRepaint) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetPositionAndSize(x, y, cx, cy, fRepaint); } NS_IMETHODIMP nsChromeTreeOwner::GetPositionAndSize(PRInt32* x, PRInt32* y, PRInt32* cx, PRInt32* cy) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetPositionAndSize(x, y, cx, cy); } NS_IMETHODIMP nsChromeTreeOwner::Repaint(PRBool aForce) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->Repaint(aForce); } NS_IMETHODIMP nsChromeTreeOwner::GetParentWidget(nsIWidget** aParentWidget) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetParentWidget(aParentWidget); } @@ -412,6 +438,7 @@ NS_IMETHODIMP nsChromeTreeOwner::SetParentWidget(nsIWidget* aParentWidget) NS_IMETHODIMP nsChromeTreeOwner::GetParentNativeWindow(nativeWindow* aParentNativeWindow) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetParentNativeWindow(aParentNativeWindow); } @@ -423,37 +450,44 @@ NS_IMETHODIMP nsChromeTreeOwner::SetParentNativeWindow(nativeWindow aParentNativ NS_IMETHODIMP nsChromeTreeOwner::GetVisibility(PRBool* aVisibility) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetVisibility(aVisibility); } NS_IMETHODIMP nsChromeTreeOwner::SetVisibility(PRBool aVisibility) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetVisibility(aVisibility); } NS_IMETHODIMP nsChromeTreeOwner::GetEnabled(PRBool *aEnabled) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetEnabled(aEnabled); } NS_IMETHODIMP nsChromeTreeOwner::SetEnabled(PRBool aEnable) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetEnabled(aEnable); } NS_IMETHODIMP nsChromeTreeOwner::GetBlurSuppression(PRBool *aBlurSuppression) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetBlurSuppression(aBlurSuppression); } NS_IMETHODIMP nsChromeTreeOwner::SetBlurSuppression(PRBool aBlurSuppression) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetBlurSuppression(aBlurSuppression); } NS_IMETHODIMP nsChromeTreeOwner::GetMainWidget(nsIWidget** aMainWidget) { NS_ENSURE_ARG_POINTER(aMainWidget); + NS_ENSURE_STATE(mXULWindow); *aMainWidget = mXULWindow->mWindow; NS_IF_ADDREF(*aMainWidget); @@ -463,16 +497,19 @@ NS_IMETHODIMP nsChromeTreeOwner::GetMainWidget(nsIWidget** aMainWidget) NS_IMETHODIMP nsChromeTreeOwner::SetFocus() { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetFocus(); } NS_IMETHODIMP nsChromeTreeOwner::GetTitle(PRUnichar** aTitle) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetTitle(aTitle); } NS_IMETHODIMP nsChromeTreeOwner::SetTitle(const PRUnichar* aTitle) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetTitle(aTitle); } @@ -507,6 +544,7 @@ NS_IMETHODIMP nsChromeTreeOwner::OnLocationChange(nsIWebProgress* aWebProgress, PRBool itsForYou = PR_TRUE; if (aWebProgress) { + NS_ENSURE_STATE(mXULWindow); nsCOMPtr progressWin; aWebProgress->GetDOMWindow(getter_AddRefs(progressWin)); @@ -519,8 +557,10 @@ NS_IMETHODIMP nsChromeTreeOwner::OnLocationChange(nsIWebProgress* aWebProgress, } // If loading a new root .xul document, then redo chrome. - if (itsForYou) + if (itsForYou) { + NS_ENSURE_STATE(mXULWindow); mXULWindow->mChromeLoaded = PR_FALSE; + } return NS_OK; } diff --git a/mozilla/xpfe/appshell/src/nsContentTreeOwner.cpp b/mozilla/xpfe/appshell/src/nsContentTreeOwner.cpp index 8cd4e92fd90..51663ddaaa0 100644 --- a/mozilla/xpfe/appshell/src/nsContentTreeOwner.cpp +++ b/mozilla/xpfe/appshell/src/nsContentTreeOwner.cpp @@ -145,11 +145,16 @@ NS_IMETHODIMP nsContentTreeOwner::GetInterface(const nsIID& aIID, void** aSink) NS_ENSURE_ARG_POINTER(aSink); *aSink = 0; - if(aIID.Equals(NS_GET_IID(nsIPrompt))) + if(aIID.Equals(NS_GET_IID(nsIPrompt))) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetInterface(aIID, aSink); - if(aIID.Equals(NS_GET_IID(nsIAuthPrompt))) + } + if(aIID.Equals(NS_GET_IID(nsIAuthPrompt))) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetInterface(aIID, aSink); + } if (aIID.Equals(NS_GET_IID(nsIDocShellTreeItem))) { + NS_ENSURE_STATE(mXULWindow); nsCOMPtr shell; mXULWindow->GetDocShell(getter_AddRefs(shell)); if (shell) @@ -158,6 +163,7 @@ NS_IMETHODIMP nsContentTreeOwner::GetInterface(const nsIID& aIID, void** aSink) } if (aIID.Equals(NS_GET_IID(nsIDOMWindow))) { + NS_ENSURE_STATE(mXULWindow); nsCOMPtr shell; mXULWindow->GetPrimaryContentShell(getter_AddRefs(shell)); if (shell) { @@ -168,8 +174,10 @@ NS_IMETHODIMP nsContentTreeOwner::GetInterface(const nsIID& aIID, void** aSink) return NS_ERROR_FAILURE; } - if (aIID.Equals(NS_GET_IID(nsIXULWindow))) + if (aIID.Equals(NS_GET_IID(nsIXULWindow))) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->QueryInterface(aIID, aSink); + } return QueryInterface(aIID, aSink); } @@ -205,6 +213,7 @@ NS_IMETHODIMP nsContentTreeOwner::FindItemWithName(const PRUnichar* aName, // should just be that content shell. Note that we don't have to worry // about the case when it's not targetable because it's primary -- that // will Just Work when we call GetPrimaryContentShell. + NS_ENSURE_STATE(mXULWindow); if (aRequestor) { // This better be the root item! #ifdef DEBUG @@ -213,6 +222,7 @@ NS_IMETHODIMP nsContentTreeOwner::FindItemWithName(const PRUnichar* aName, NS_ASSERTION(SameCOMIdentity(debugRoot, aRequestor), "Bogus aRequestor"); #endif + PRInt32 count = mXULWindow->mTargetableShells.Count(); for (PRInt32 i = 0; i < count; ++i) { nsCOMPtr item = @@ -308,12 +318,14 @@ NS_IMETHODIMP nsContentTreeOwner::ContentShellAdded(nsIDocShellTreeItem* aConten NS_IMETHODIMP nsContentTreeOwner::GetPrimaryContentShell(nsIDocShellTreeItem** aShell) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetPrimaryContentShell(aShell); } NS_IMETHODIMP nsContentTreeOwner::SizeShellTo(nsIDocShellTreeItem* aShellItem, PRInt32 aCX, PRInt32 aCY) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SizeShellTo(aShellItem, aCX, aCY); } @@ -322,6 +334,7 @@ nsContentTreeOwner::SetPersistence(PRBool aPersistPosition, PRBool aPersistSize, PRBool aPersistSizeMode) { + NS_ENSURE_STATE(mXULWindow); nsCOMPtr docShellElement; mXULWindow->GetWindowDOMElement(getter_AddRefs(docShellElement)); if(!docShellElement) @@ -390,6 +403,7 @@ nsContentTreeOwner::GetPersistence(PRBool* aPersistPosition, PRBool* aPersistSize, PRBool* aPersistSizeMode) { + NS_ENSURE_STATE(mXULWindow); nsCOMPtr docShellElement; mXULWindow->GetWindowDOMElement(getter_AddRefs(docShellElement)); if(!docShellElement) @@ -421,6 +435,8 @@ NS_IMETHODIMP nsContentTreeOwner::SetStatusWithContext(PRUint32 aStatusType, // We only allow the status to be set from the primary content shell if (!mPrimary && aStatusType != STATUS_LINK) return NS_OK; + + NS_ENSURE_STATE(mXULWindow); nsCOMPtr xulBrowserWindow; mXULWindow->GetXULBrowserWindow(getter_AddRefs(xulBrowserWindow)); @@ -477,11 +493,13 @@ NS_IMETHODIMP nsContentTreeOwner::GetWebBrowser(nsIWebBrowser** aWebBrowser) NS_IMETHODIMP nsContentTreeOwner::SetChromeFlags(PRUint32 aChromeFlags) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetChromeFlags(aChromeFlags); } NS_IMETHODIMP nsContentTreeOwner::GetChromeFlags(PRUint32* aChromeFlags) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetChromeFlags(aChromeFlags); } @@ -499,17 +517,20 @@ NS_IMETHODIMP nsContentTreeOwner::SizeBrowserTo(PRInt32 aCX, PRInt32 aCY) NS_IMETHODIMP nsContentTreeOwner::ShowAsModal() { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->ShowModal(); } NS_IMETHODIMP nsContentTreeOwner::IsWindowModal(PRBool *_retval) { + NS_ENSURE_STATE(mXULWindow); *_retval = mXULWindow->mContinueModalLoop; return NS_OK; } NS_IMETHODIMP nsContentTreeOwner::ExitModalEventLoop(nsresult aStatus) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->ExitModalLoop(aStatus); } @@ -534,48 +555,57 @@ NS_IMETHODIMP nsContentTreeOwner::Create() NS_IMETHODIMP nsContentTreeOwner::Destroy() { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->Destroy(); } NS_IMETHODIMP nsContentTreeOwner::SetPosition(PRInt32 aX, PRInt32 aY) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetPosition(aX, aY); } NS_IMETHODIMP nsContentTreeOwner::GetPosition(PRInt32* aX, PRInt32* aY) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetPosition(aX, aY); } NS_IMETHODIMP nsContentTreeOwner::SetSize(PRInt32 aCX, PRInt32 aCY, PRBool aRepaint) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetSize(aCX, aCY, aRepaint); } NS_IMETHODIMP nsContentTreeOwner::GetSize(PRInt32* aCX, PRInt32* aCY) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetSize(aCX, aCY); } NS_IMETHODIMP nsContentTreeOwner::SetPositionAndSize(PRInt32 aX, PRInt32 aY, PRInt32 aCX, PRInt32 aCY, PRBool aRepaint) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetPositionAndSize(aX, aY, aCX, aCY, aRepaint); } NS_IMETHODIMP nsContentTreeOwner::GetPositionAndSize(PRInt32* aX, PRInt32* aY, PRInt32* aCX, PRInt32* aCY) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetPositionAndSize(aX, aY, aCX, aCY); } NS_IMETHODIMP nsContentTreeOwner::Repaint(PRBool aForce) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->Repaint(aForce); } NS_IMETHODIMP nsContentTreeOwner::GetParentWidget(nsIWidget** aParentWidget) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetParentWidget(aParentWidget); } @@ -587,6 +617,7 @@ NS_IMETHODIMP nsContentTreeOwner::SetParentWidget(nsIWidget* aParentWidget) NS_IMETHODIMP nsContentTreeOwner::GetParentNativeWindow(nativeWindow* aParentNativeWindow) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetParentNativeWindow(aParentNativeWindow); } @@ -598,37 +629,44 @@ NS_IMETHODIMP nsContentTreeOwner::SetParentNativeWindow(nativeWindow aParentNati NS_IMETHODIMP nsContentTreeOwner::GetVisibility(PRBool* aVisibility) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetVisibility(aVisibility); } NS_IMETHODIMP nsContentTreeOwner::SetVisibility(PRBool aVisibility) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetVisibility(aVisibility); } NS_IMETHODIMP nsContentTreeOwner::GetEnabled(PRBool *aEnabled) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetEnabled(aEnabled); } NS_IMETHODIMP nsContentTreeOwner::SetEnabled(PRBool aEnable) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetEnabled(aEnable); } NS_IMETHODIMP nsContentTreeOwner::GetBlurSuppression(PRBool *aBlurSuppression) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetBlurSuppression(aBlurSuppression); } NS_IMETHODIMP nsContentTreeOwner::SetBlurSuppression(PRBool aBlurSuppression) { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetBlurSuppression(aBlurSuppression); } NS_IMETHODIMP nsContentTreeOwner::GetMainWidget(nsIWidget** aMainWidget) { NS_ENSURE_ARG_POINTER(aMainWidget); + NS_ENSURE_STATE(mXULWindow); *aMainWidget = mXULWindow->mWindow; NS_IF_ADDREF(*aMainWidget); @@ -638,12 +676,14 @@ NS_IMETHODIMP nsContentTreeOwner::GetMainWidget(nsIWidget** aMainWidget) NS_IMETHODIMP nsContentTreeOwner::SetFocus() { + NS_ENSURE_STATE(mXULWindow); return mXULWindow->SetFocus(); } NS_IMETHODIMP nsContentTreeOwner::GetTitle(PRUnichar** aTitle) { NS_ENSURE_ARG_POINTER(aTitle); + NS_ENSURE_STATE(mXULWindow); return mXULWindow->GetTitle(aTitle); } @@ -653,6 +693,8 @@ NS_IMETHODIMP nsContentTreeOwner::SetTitle(const PRUnichar* aTitle) // We only allow the title to be set from the primary content shell if(!mPrimary || !mContentTitleSetting) return NS_OK; + + NS_ENSURE_STATE(mXULWindow); nsAutoString title; nsAutoString docTitle(aTitle);