From a6616be366e4e626232464b61ae37abbcf4bd80c Mon Sep 17 00:00:00 2001 From: "tbogard%aol.net" Date: Tue, 14 Mar 2000 07:10:08 +0000 Subject: [PATCH] nsDocShellTreeOwner now implements nsIWebProgressListener. nsIInterfaceRequestor is not a required interface of the embedding owner. Provided basic implementation for most of the nsIDocShellTreeOwner Methods. Provided basic implementation for most of nsIBaseWindow. Implementation for nsIWebProgressListener. git-svn-id: svn://10.0.0.236/trunk@62898 18797224-902f-48f8-a5cc-f745e15eee43 --- .../webBrowser/nsDocShellTreeOwner.cpp | 271 ++++++++++++------ .../browser/webBrowser/nsDocShellTreeOwner.h | 6 +- 2 files changed, 195 insertions(+), 82 deletions(-) diff --git a/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp b/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp index 69f7c30601c..80b62618045 100644 --- a/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp +++ b/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp @@ -26,8 +26,11 @@ // Helper Classes #include "nsIGenericFactory.h" +#include "nsStyleCoord.h" +#include "nsHTMLReflowState.h" // Interfaces needed to be included +#include "nsIPresShell.h" // CIDs @@ -57,6 +60,7 @@ NS_INTERFACE_MAP_BEGIN(nsDocShellTreeOwner) NS_INTERFACE_MAP_ENTRY(nsIDocShellTreeOwner) NS_INTERFACE_MAP_ENTRY(nsIBaseWindow) NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor) + NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener) NS_INTERFACE_MAP_END //***************************************************************************** @@ -66,9 +70,14 @@ NS_INTERFACE_MAP_END NS_IMETHODIMP nsDocShellTreeOwner::GetInterface(const nsIID& aIID, void** aSink) { NS_ENSURE_ARG_POINTER(aSink); - NS_ENSURE_STATE(mOwnerRequestor); - return mOwnerRequestor->GetInterface(aIID, aSink); + if(NS_SUCCEEDED(QueryInterface(aIID, aSink))) + return NS_OK; + + if(mOwnerRequestor) + return mOwnerRequestor->GetInterface(aIID, aSink); + + return NS_NOINTERFACE; } //***************************************************************************** @@ -147,39 +156,89 @@ NS_IMETHODIMP nsDocShellTreeOwner::FindItemWithName(const PRUnichar* aName, NS_IMETHODIMP nsDocShellTreeOwner::ContentShellAdded(nsIDocShellTreeItem* aContentShell, PRBool aPrimary, const PRUnichar* aID) { - //XXXTAB - //mXULWindow->ContentShellAdded(aContentShell, aPrimary, aID); + if(mTreeOwner) + return mTreeOwner->ContentShellAdded(aContentShell, aPrimary, aID); + return NS_OK; } NS_IMETHODIMP nsDocShellTreeOwner::GetPrimaryContentShell(nsIDocShellTreeItem** aShell) { - //XXXTAB - //return mXULWindow->GetPrimaryContentShell(aShell); - return NS_ERROR_FAILURE; + NS_ENSURE_ARG_POINTER(aShell); + + *aShell = mWebBrowser->mDocShellAsItem; + NS_IF_ADDREF(*aShell); + + return NS_OK; } NS_IMETHODIMP nsDocShellTreeOwner::SizeShellTo(nsIDocShellTreeItem* aShellItem, PRInt32 aCX, PRInt32 aCY) { - //XXXTAB - //return mXULWindow->SizeShellTo(aShellItem, aCX, aCY); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mTreeOwner || mWebBrowserChrome); + + if(mTreeOwner) + return mTreeOwner->SizeShellTo(aShellItem, aCX, aCY); + + if(aShellItem == mWebBrowser->mDocShellAsItem.get()) + return mWebBrowserChrome->SizeBrowserTo(aCX, aCY); + + //XXX + NS_ERROR("Implement this"); + /* + Set the preferred size on the aShellItem. + */ + + nsCOMPtr presContext; + mWebBrowser->mDocShell->GetPresContext(getter_AddRefs(presContext)); + NS_ENSURE_TRUE(presContext, NS_ERROR_FAILURE); + + nsCOMPtr presShell; + presContext->GetShell(getter_AddRefs(presShell)); + NS_ENSURE_TRUE(presShell, NS_ERROR_FAILURE); + + NS_ENSURE_SUCCESS(presShell->ResizeReflow(NS_UNCONSTRAINEDSIZE, + NS_UNCONSTRAINEDSIZE), NS_ERROR_FAILURE); + + nsRect shellArea; + + presContext->GetVisibleArea(shellArea); + float pixelScale; + presContext->GetTwipsToPixels(&pixelScale); + PRInt32 browserCX = PRInt32((float)shellArea.width*pixelScale); + PRInt32 browserCY = PRInt32((float)shellArea.height*pixelScale); + + return mWebBrowserChrome->SizeBrowserTo(browserCX, browserCY); } NS_IMETHODIMP nsDocShellTreeOwner::ShowModal() { - //XXXTAB - //return mXULWindow->ShowModal(); - return NS_ERROR_FAILURE; + if(mTreeOwner) + return mTreeOwner->ShowModal(); + + return mWebBrowserChrome->ShowAsModal(); } NS_IMETHODIMP nsDocShellTreeOwner::GetNewWindow(PRInt32 aChromeFlags, nsIDocShellTreeItem** aDocShellTreeItem) { - //XXXTAB - //return mXULWindow->GetNewWindow(aChromeFlags, aDocShellTreeItem); - return NS_ERROR_FAILURE; + if(mTreeOwner) + return mTreeOwner->GetNewWindow(aChromeFlags, aDocShellTreeItem); + + *aDocShellTreeItem = nsnull; + + nsCOMPtr webBrowser; + mWebBrowserChrome->GetNewBrowser(aChromeFlags, getter_AddRefs(webBrowser)); + NS_ENSURE_TRUE(webBrowser, NS_ERROR_FAILURE); + + nsCOMPtr docShell; + webBrowser->GetDocShell(getter_AddRefs(docShell)); + NS_ENSURE_TRUE(docShell, NS_ERROR_FAILURE); + + NS_ENSURE_SUCCESS(CallQueryInterface(docShell, aDocShellTreeItem), + NS_ERROR_FAILURE); + + return NS_OK; } //***************************************************************************** @@ -187,154 +246,201 @@ NS_IMETHODIMP nsDocShellTreeOwner::GetNewWindow(PRInt32 aChromeFlags, //***************************************************************************** NS_IMETHODIMP nsDocShellTreeOwner::InitWindow(nativeWindow aParentNativeWindow, - nsIWidget* parentWidget, PRInt32 x, PRInt32 y, PRInt32 cx, PRInt32 cy) + nsIWidget* aParentWidget, PRInt32 aX, PRInt32 aY, PRInt32 aCX, PRInt32 aCY) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->InitWindow(aParentNativeWindow, aParentWidget, aX, aY, + aCX, aCY); } NS_IMETHODIMP nsDocShellTreeOwner::Create() { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->Create(); } NS_IMETHODIMP nsDocShellTreeOwner::Destroy() { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->Destroy(); } NS_IMETHODIMP nsDocShellTreeOwner::SetPosition(PRInt32 aX, PRInt32 aY) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->SetPosition(aX, aY); } NS_IMETHODIMP nsDocShellTreeOwner::GetPosition(PRInt32* aX, PRInt32* aY) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->GetPosition(aX, aY); } NS_IMETHODIMP nsDocShellTreeOwner::SetSize(PRInt32 aCX, PRInt32 aCY, PRBool aRepaint) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->SetSize(aCX, aCY, aRepaint); } NS_IMETHODIMP nsDocShellTreeOwner::GetSize(PRInt32* aCX, PRInt32* aCY) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->GetSize(aCX, aCY); } NS_IMETHODIMP nsDocShellTreeOwner::SetPositionAndSize(PRInt32 aX, PRInt32 aY, PRInt32 aCX, PRInt32 aCY, PRBool aRepaint) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->SetPositionAndSize(aX, aY, aCX, aCY, aRepaint); } NS_IMETHODIMP nsDocShellTreeOwner::GetPositionAndSize(PRInt32* aX, PRInt32* aY, PRInt32* aCX, PRInt32* aCY) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->GetPositionAndSize(aX, aY, aCX, aCY); } NS_IMETHODIMP nsDocShellTreeOwner::Repaint(PRBool aForce) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->Repaint(aForce); } NS_IMETHODIMP nsDocShellTreeOwner::GetParentWidget(nsIWidget** aParentWidget) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->GetParentWidget(aParentWidget); } NS_IMETHODIMP nsDocShellTreeOwner::SetParentWidget(nsIWidget* aParentWidget) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->SetParentWidget(aParentWidget); } NS_IMETHODIMP nsDocShellTreeOwner::GetParentNativeWindow(nativeWindow* aParentNativeWindow) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->GetParentNativeWindow(aParentNativeWindow); } NS_IMETHODIMP nsDocShellTreeOwner::SetParentNativeWindow(nativeWindow aParentNativeWindow) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->SetParentNativeWindow(aParentNativeWindow); } NS_IMETHODIMP nsDocShellTreeOwner::GetVisibility(PRBool* aVisibility) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->GetVisibility(aVisibility); } NS_IMETHODIMP nsDocShellTreeOwner::SetVisibility(PRBool aVisibility) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->SetVisibility(aVisibility); } NS_IMETHODIMP nsDocShellTreeOwner::GetMainWidget(nsIWidget** aMainWidget) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->GetMainWidget(aMainWidget); } NS_IMETHODIMP nsDocShellTreeOwner::SetFocus() { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->SetFocus(); } NS_IMETHODIMP nsDocShellTreeOwner::FocusAvailable(nsIBaseWindow* aCurrentFocus, PRBool* aTookFocus) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->FocusAvailable(aCurrentFocus, aTookFocus); } NS_IMETHODIMP nsDocShellTreeOwner::GetTitle(PRUnichar** aTitle) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->GetTitle(aTitle); } NS_IMETHODIMP nsDocShellTreeOwner::SetTitle(const PRUnichar* aTitle) { - //XXX - NS_ERROR("NOT YET IMPLEMENTED"); - return NS_ERROR_FAILURE; + NS_ENSURE_STATE(mOwnerWin); + + return mOwnerWin->SetTitle(aTitle); +} + +//***************************************************************************** +// nsDocShellTreeOwner::nsIWebProgressListener +//***************************************************************************** + +NS_IMETHODIMP nsDocShellTreeOwner::OnProgressChange(nsIChannel* aChannel, + PRInt32 aCurSelfProgress, PRInt32 aMaxSelfProgress, + PRInt32 aCurTotalProgress, PRInt32 aMaxTotalProgress) +{ + if(!mOwnerProgressListener) + return NS_OK; + + return mOwnerProgressListener->OnProgressChange(aChannel, + aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, + aMaxTotalProgress); +} + +NS_IMETHODIMP nsDocShellTreeOwner::OnChildProgressChange(nsIChannel* aChannel, + PRInt32 aCurSelfProgress, PRInt32 aMaxSelfProgress) +{ + if(!mOwnerProgressListener) + return NS_OK; + + return mOwnerProgressListener->OnChildProgressChange(aChannel, + aCurSelfProgress, aMaxSelfProgress); +} + +NS_IMETHODIMP nsDocShellTreeOwner::OnStatusChange(nsIChannel* aChannel, + PRInt32 aProgressStatusFlags) +{ + if(!mOwnerProgressListener) + return NS_OK; + + return mOwnerProgressListener->OnStatusChange(aChannel, + aProgressStatusFlags); +} + +NS_IMETHODIMP nsDocShellTreeOwner::OnChildStatusChange(nsIChannel* aChannel, + PRInt32 aProgressStatusFlags) +{ + if(!mOwnerProgressListener) + return NS_OK; + + return mOwnerProgressListener->OnChildStatusChange(aChannel, + aProgressStatusFlags); } //***************************************************************************** @@ -381,17 +487,20 @@ NS_IMETHODIMP nsDocShellTreeOwner::SetWebBrowserChrome(nsIWebBrowserChrome* aWeb { mWebBrowserChrome = nsnull; mOwnerWin = nsnull; + mOwnerProgressListener = nsnull; mOwnerRequestor = nsnull; } else { nsCOMPtr baseWin(do_QueryInterface(aWebBrowserChrome)); nsCOMPtr requestor(do_QueryInterface(aWebBrowserChrome)); + nsCOMPtr progressListener(do_QueryInterface(aWebBrowserChrome)); - NS_ENSURE_TRUE(baseWin && requestor, NS_ERROR_INVALID_ARG); + NS_ENSURE_TRUE(baseWin, NS_ERROR_INVALID_ARG); mWebBrowserChrome = aWebBrowserChrome; mOwnerWin = baseWin; + mOwnerProgressListener = progressListener; mOwnerRequestor = requestor; } return NS_OK; diff --git a/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.h b/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.h index 4d146b0978d..8d7e9ff4385 100644 --- a/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.h +++ b/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.h @@ -32,12 +32,14 @@ #include "nsIDocShellTreeOwner.h" #include "nsIInterfaceRequestor.h" #include "nsIWebBrowserChrome.h" +#include "nsIWebProgressListener.h" class nsWebBrowser; class nsDocShellTreeOwner : public nsIDocShellTreeOwner, public nsIBaseWindow, - public nsIInterfaceRequestor + public nsIInterfaceRequestor, + public nsIWebProgressListener { friend class nsWebBrowser; @@ -47,6 +49,7 @@ public: NS_DECL_NSIBASEWINDOW NS_DECL_NSIDOCSHELLTREEOWNER NS_DECL_NSIINTERFACEREQUESTOR + NS_DECL_NSIWEBPROGRESSLISTENER protected: nsDocShellTreeOwner(); @@ -63,6 +66,7 @@ protected: nsWebBrowser* mWebBrowser; nsIDocShellTreeOwner* mTreeOwner; nsIWebBrowserChrome* mWebBrowserChrome; + nsIWebProgressListener* mOwnerProgressListener; nsIBaseWindow* mOwnerWin; nsIInterfaceRequestor* mOwnerRequestor; };