GlobalWindow now calls up nsIDocShellTreeOwner rather than nsIBrowserWindow. GlobalWindow has mostly been re-organized as well as cleaned up to provide this new functionality. DocShellTreeOwners got implementations filled in and many bugs fixed. nsIScriptGlobalObject now talks in terms of docShells instead of webShells. Fixed a number of cases where people were walking through content viewers etc to get to a presShell and changed them to simply ask for the presShell from the docShell. GlobalWindow now deals completely in terms of docShells. r=vidur
This commit is contained in:
@@ -31,6 +31,8 @@
|
||||
// Interfaces needed to be included
|
||||
#include "nsIDOMNode.h"
|
||||
#include "nsIDOMElement.h"
|
||||
#include "nsIDOMNodeList.h"
|
||||
#include "nsIDOMXULElement.h"
|
||||
#include "nsIWindowMediator.h"
|
||||
|
||||
// CIDs
|
||||
@@ -41,7 +43,7 @@ static NS_DEFINE_CID(kWindowMediatorCID, NS_WINDOWMEDIATOR_CID);
|
||||
//*****************************************************************************
|
||||
|
||||
nsContentTreeOwner::nsContentTreeOwner(PRBool fPrimary) : mXULWindow(nsnull),
|
||||
mPrimary(fPrimary)
|
||||
mPrimary(fPrimary), mChromeMask(0)
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
@@ -61,8 +63,27 @@ NS_INTERFACE_MAP_BEGIN(nsContentTreeOwner)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDocShellTreeOwner)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDocShellTreeOwner)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIBaseWindow)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIWebBrowserChrome)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
//*****************************************************************************
|
||||
// nsContentTreeOwner::nsIInterfaceRequestor
|
||||
//*****************************************************************************
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetInterface(const nsIID& aIID, void** aSink)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aSink);
|
||||
|
||||
if(aIID.Equals(NS_GET_IID(nsIWebBrowserChrome)))
|
||||
*aSink = NS_STATIC_CAST(nsIWebBrowserChrome*, this);
|
||||
else
|
||||
return QueryInterface(aIID, aSink);
|
||||
|
||||
NS_IF_ADDREF(((nsISupports*)*aSink));
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
//*****************************************************************************
|
||||
// nsContentTreeOwner::nsIDocShellTreeOwner
|
||||
//*****************************************************************************
|
||||
@@ -143,10 +164,74 @@ NS_IMETHODIMP nsContentTreeOwner::ShowModal()
|
||||
return mXULWindow->ShowModal();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetNewBrowserChrome(PRInt32 aChromeFlags,
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetNewWindow(PRInt32 aChromeFlags,
|
||||
nsIDocShellTreeItem** aDocShellTreeItem)
|
||||
{
|
||||
return mXULWindow->GetNewWindow(aChromeFlags, aDocShellTreeItem);
|
||||
}
|
||||
|
||||
//*****************************************************************************
|
||||
// nsContentTreeOwner::nsIWebBrowserChrome
|
||||
//*****************************************************************************
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::SetJSStatus(const PRUnichar* aStatus)
|
||||
{
|
||||
NS_ERROR("Haven't Implemented this yet");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::SetJSDefaultStatus(const PRUnichar* aStatus)
|
||||
{
|
||||
NS_ERROR("Haven't Implemented this yet");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::SetOverLink(const PRUnichar* aLink)
|
||||
{
|
||||
NS_ERROR("Haven't Implemented this yet");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::SetWebBrowser(nsIWebBrowser* aWebBrowser)
|
||||
{
|
||||
NS_ERROR("Haven't Implemented this yet");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetWebBrowser(nsIWebBrowser** aWebBrowser)
|
||||
{
|
||||
NS_ERROR("Haven't Implemented this yet");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::SetChromeMask(PRUint32 aChromeMask)
|
||||
{
|
||||
mChromeMask = aChromeMask;
|
||||
NS_ENSURE_SUCCESS(ApplyChromeMask(), NS_ERROR_FAILURE);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetChromeMask(PRUint32* aChromeMask)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aChromeMask);
|
||||
|
||||
*aChromeMask = mChromeMask;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetNewBrowserChrome(nsIWebBrowserChrome**
|
||||
aWebBrowserChrome)
|
||||
{
|
||||
NS_ERROR("Haven't Implemented this yet");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::FindNamedBrowserChrome(const PRUnichar* aName,
|
||||
nsIWebBrowserChrome** aWebBrowserChrome)
|
||||
{
|
||||
return mXULWindow->GetNewBrowserChrome(aChromeFlags, aWebBrowserChrome);
|
||||
NS_ERROR("Haven't Implemented this yet");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
//*****************************************************************************
|
||||
@@ -170,72 +255,49 @@ NS_IMETHODIMP nsContentTreeOwner::Create()
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::Destroy()
|
||||
{
|
||||
NS_ASSERTION(PR_FALSE, "You can't call this");
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
return mXULWindow->Destroy();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::SetPosition(PRInt32 x, PRInt32 y)
|
||||
NS_IMETHODIMP nsContentTreeOwner::SetPosition(PRInt32 aX, PRInt32 aY)
|
||||
{
|
||||
//XXX First Check In
|
||||
NS_ASSERTION(PR_FALSE, "Not Yet Implemented");
|
||||
return NS_OK;
|
||||
return mXULWindow->SetPosition(aX, aY);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetPosition(PRInt32* x, PRInt32* y)
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetPosition(PRInt32* aX, PRInt32* aY)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(x && y);
|
||||
|
||||
//XXX First Check In
|
||||
NS_ASSERTION(PR_FALSE, "Not Yet Implemented");
|
||||
return NS_OK;
|
||||
return mXULWindow->GetPosition(aX, aY);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::SetSize(PRInt32 cx, PRInt32 cy, PRBool fRepaint)
|
||||
NS_IMETHODIMP nsContentTreeOwner::SetSize(PRInt32 aCX, PRInt32 aCY, PRBool aRepaint)
|
||||
{
|
||||
//XXX First Check In
|
||||
NS_ASSERTION(PR_FALSE, "Not Yet Implemented");
|
||||
return NS_OK;
|
||||
return mXULWindow->SetSize(aCX, aCY, aRepaint);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetSize(PRInt32* cx, PRInt32* cy)
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetSize(PRInt32* aCX, PRInt32* aCY)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(cx && cy);
|
||||
|
||||
//XXX First Check In
|
||||
NS_ASSERTION(PR_FALSE, "Not Yet Implemented");
|
||||
return NS_OK;
|
||||
return mXULWindow->GetSize(aCX, aCY);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::SetPositionAndSize(PRInt32 x, PRInt32 y, PRInt32 cx,
|
||||
PRInt32 cy, PRBool fRepaint)
|
||||
NS_IMETHODIMP nsContentTreeOwner::SetPositionAndSize(PRInt32 aX, PRInt32 aY,
|
||||
PRInt32 aCX, PRInt32 aCY, PRBool aRepaint)
|
||||
{
|
||||
//XXX First Check In
|
||||
NS_ASSERTION(PR_FALSE, "Not Yet Implemented");
|
||||
return NS_OK;
|
||||
return mXULWindow->SetPositionAndSize(aX, aY, aCX, aCY, aRepaint);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetPositionAndSize(PRInt32* x, PRInt32* y, PRInt32* cx,
|
||||
PRInt32* cy)
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetPositionAndSize(PRInt32* aX, PRInt32* aY,
|
||||
PRInt32* aCX, PRInt32* aCY)
|
||||
{
|
||||
|
||||
//XXX First Check In
|
||||
NS_ASSERTION(PR_FALSE, "Not Yet Implemented");
|
||||
return NS_OK;
|
||||
return mXULWindow->GetPositionAndSize(aX, aY, aCX, aCY);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::Repaint(PRBool aForce)
|
||||
{
|
||||
//XXX First Check In
|
||||
NS_ASSERTION(PR_FALSE, "Not Yet Implemented");
|
||||
return NS_OK;
|
||||
return mXULWindow->Repaint(aForce);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetParentWidget(nsIWidget** aParentWidget)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aParentWidget);
|
||||
//XXX First Check In
|
||||
NS_ASSERTION(PR_FALSE, "Not Yet Implemented");
|
||||
return NS_OK;
|
||||
return mXULWindow->GetParentWidget(aParentWidget);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::SetParentWidget(nsIWidget* aParentWidget)
|
||||
@@ -246,11 +308,7 @@ NS_IMETHODIMP nsContentTreeOwner::SetParentWidget(nsIWidget* aParentWidget)
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetParentNativeWindow(nativeWindow* aParentNativeWindow)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aParentNativeWindow);
|
||||
|
||||
//XXX First Check In
|
||||
NS_ASSERTION(PR_FALSE, "Not Yet Implemented");
|
||||
return NS_OK;
|
||||
return mXULWindow->GetParentNativeWindow(aParentNativeWindow);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::SetParentNativeWindow(nativeWindow aParentNativeWindow)
|
||||
@@ -261,18 +319,12 @@ NS_IMETHODIMP nsContentTreeOwner::SetParentNativeWindow(nativeWindow aParentNati
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetVisibility(PRBool* aVisibility)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aVisibility);
|
||||
|
||||
//XXX First Check In
|
||||
NS_ASSERTION(PR_FALSE, "Not Yet Implemented");
|
||||
return NS_OK;
|
||||
return mXULWindow->GetVisibility(aVisibility);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::SetVisibility(PRBool aVisibility)
|
||||
{
|
||||
//XXX First Check In
|
||||
NS_ASSERTION(PR_FALSE, "Not Yet Implemented");
|
||||
return NS_OK;
|
||||
return mXULWindow->SetVisibility(aVisibility);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::GetMainWidget(nsIWidget** aMainWidget)
|
||||
@@ -364,6 +416,92 @@ NS_IMETHODIMP nsContentTreeOwner::SetTitle(const PRUnichar* aTitle)
|
||||
// nsContentTreeOwner: Helpers
|
||||
//*****************************************************************************
|
||||
|
||||
NS_IMETHODIMP nsContentTreeOwner::ApplyChromeMask()
|
||||
{
|
||||
if(!mXULWindow->mChromeLoaded)
|
||||
return NS_OK; // We'll do this later when chrome is loaded
|
||||
|
||||
nsCOMPtr<nsIDOMElement> domElement;
|
||||
mXULWindow->GetDOMElementFromDocShell(mXULWindow->mDocShell,
|
||||
getter_AddRefs(domElement));
|
||||
NS_ENSURE_TRUE(domElement, NS_ERROR_FAILURE);
|
||||
|
||||
mXULWindow->mWindow->ShowMenuBar(mChromeMask &
|
||||
nsIWebBrowserChrome::menuBarOn ?
|
||||
PR_TRUE : PR_FALSE);
|
||||
|
||||
// get a list of this document's elements with the chromeclass attribute specified
|
||||
nsCOMPtr<nsIDOMXULElement> xulRoot(do_QueryInterface(domElement));
|
||||
NS_ENSURE_TRUE(xulRoot, NS_ERROR_FAILURE);
|
||||
|
||||
// todo (maybe) the longer, straight DOM (not RDF) version?
|
||||
nsCOMPtr<nsIDOMNodeList> chromeNodes;
|
||||
xulRoot->GetElementsByAttribute("chromeclass", "*",
|
||||
getter_AddRefs(chromeNodes));
|
||||
NS_ENSURE_TRUE(chromeNodes, NS_ERROR_FAILURE);
|
||||
|
||||
PRUint32 nodeCtr;
|
||||
PRUint32 nodeCount;
|
||||
|
||||
chromeNodes->GetLength(&nodeCount);
|
||||
|
||||
for(nodeCtr = 0; nodeCtr < nodeCount; nodeCtr++)
|
||||
{
|
||||
nsCOMPtr<nsIDOMNode> domNode;
|
||||
chromeNodes->Item(nodeCtr, getter_AddRefs(domNode));
|
||||
nsCOMPtr<nsIDOMElement> domElement(do_QueryInterface(domNode));
|
||||
if(domElement)
|
||||
{
|
||||
nsAutoString chromeClass;
|
||||
PRBool makeChange;
|
||||
PRUint32 flag;
|
||||
// show or hide the element according to its chromeclass and the chromemask
|
||||
domElement->GetAttribute("chromeclass", chromeClass);
|
||||
makeChange = PR_FALSE;
|
||||
if(chromeClass == "menubar")
|
||||
{
|
||||
makeChange = PR_TRUE;
|
||||
flag = mChromeMask & nsIWebBrowserChrome::menuBarOn;
|
||||
}
|
||||
else if(chromeClass == "toolbar")
|
||||
{
|
||||
makeChange = PR_TRUE;
|
||||
flag = mChromeMask & nsIWebBrowserChrome::toolBarOn;
|
||||
}
|
||||
else if(chromeClass == "location")
|
||||
{
|
||||
makeChange = PR_TRUE;
|
||||
flag = mChromeMask & nsIWebBrowserChrome::locationBarOn;
|
||||
}
|
||||
else if(chromeClass == "directories")
|
||||
{
|
||||
makeChange = PR_TRUE;
|
||||
flag = mChromeMask & nsIWebBrowserChrome::personalToolBarOn;
|
||||
}
|
||||
else if(chromeClass == "status")
|
||||
{
|
||||
makeChange = PR_TRUE;
|
||||
flag = mChromeMask & nsIWebBrowserChrome::statusBarOn;
|
||||
}
|
||||
else if(chromeClass == "extrachrome")
|
||||
{
|
||||
makeChange = PR_TRUE;
|
||||
flag = mChromeMask & nsIWebBrowserChrome::extraChromeOn;
|
||||
}
|
||||
|
||||
if(makeChange)
|
||||
{
|
||||
if(flag)
|
||||
domElement->RemoveAttribute("chromehidden");
|
||||
else
|
||||
domElement->SetAttribute("chromehidden", "T");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
//*****************************************************************************
|
||||
// nsContentTreeOwner: Accessors
|
||||
//*****************************************************************************
|
||||
|
||||
Reference in New Issue
Block a user