nsIWebShell now supports a single observer for all document loads...The DocLoader now stops any pending binds when a new document is requested...

git-svn-id: svn://10.0.0.236/trunk@6167 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
rpotts%netscape.com
1998-07-22 11:24:50 +00:00
parent 15b08d846d
commit 71f151059e
2 changed files with 84 additions and 26 deletions

View File

@@ -97,6 +97,8 @@ public:
NS_IMETHOD GetContentViewer(nsIContentViewer*& aResult);
NS_IMETHOD SetContainer(nsIWebShellContainer* aContainer);
NS_IMETHOD GetContainer(nsIWebShellContainer*& aResult);
NS_IMETHOD SetObserver(nsIStreamObserver* anObserver);
NS_IMETHOD GetObserver(nsIStreamObserver*& aResult);
NS_IMETHOD GetRootWebShell(nsIWebShell*& aResult);
NS_IMETHOD SetParent(nsIWebShell* aParent);
NS_IMETHOD GetParent(nsIWebShell*& aParent);
@@ -107,12 +109,11 @@ public:
NS_IMETHOD SetName(const nsString& aName);
NS_IMETHOD FindChildWithName(const nsString& aName,
nsIWebShell*& aResult);
NS_IMETHOD Back(nsIStreamObserver* aObserver);
NS_IMETHOD Forward(nsIStreamObserver* aObserver);
NS_IMETHOD Back(void);
NS_IMETHOD Forward(void);
NS_IMETHOD LoadURL(const nsString& aURLSpec,
nsIStreamObserver* aObserver,
nsIPostData* aPostData=nsnull);
NS_IMETHOD GoTo(PRInt32 aHistoryIndex, nsIStreamObserver* aObserver);
NS_IMETHOD GoTo(PRInt32 aHistoryIndex);
NS_IMETHOD GetHistoryIndex(PRInt32& aResult);
NS_IMETHOD SetTitle(const nsString& aTitle);
NS_IMETHOD GetTitle(nsString& aResult);
@@ -157,6 +158,7 @@ protected:
nsIWidget* mWindow;
nsISupports* mInnerWindow;
nsIDocumentLoader* mDocLoader;
nsIStreamObserver* mObserver;
nsIWebShell* mParent;
nsVoidArray mChildren;
@@ -211,6 +213,7 @@ nsWebShell::~nsWebShell()
NS_IF_RELEASE(mContentViewer);
NS_IF_RELEASE(mContainer);
NS_IF_RELEASE(mObserver);
// Release references on our children
ReleaseChildren();
@@ -480,6 +483,25 @@ nsWebShell::HandleEvent(nsGUIEvent *aEvent)
return nsEventStatus_eIgnore;
}
NS_IMETHODIMP
nsWebShell::SetObserver(nsIStreamObserver* anObserver)
{
NS_IF_RELEASE(mObserver);
mObserver = anObserver;
NS_IF_ADDREF(mObserver);
return NS_OK;
}
NS_IMETHODIMP
nsWebShell::GetObserver(nsIStreamObserver*& aResult)
{
aResult = mObserver;
NS_IF_ADDREF(mObserver);
return NS_OK;
}
nsresult
nsWebShell::GetRootWebShell(nsIWebShell*& aResult)
{
@@ -597,20 +619,19 @@ nsWebShell::FindChildWithName(const nsString& aName,
// History methods
NS_IMETHODIMP
nsWebShell::Back(nsIStreamObserver* aObserver)
nsWebShell::Back(void)
{
return GoTo(mHistoryIndex - 1, aObserver);
return GoTo(mHistoryIndex - 1);
}
NS_IMETHODIMP
nsWebShell::Forward(nsIStreamObserver* aObserver)
nsWebShell::Forward(void)
{
return GoTo(mHistoryIndex + 1, aObserver);
return GoTo(mHistoryIndex + 1);
}
NS_IMETHODIMP
nsWebShell::LoadURL(const nsString& aURLSpec,
nsIStreamObserver* aObserver,
nsIPostData* aPostData)
{
nsresult rv;
@@ -646,17 +667,21 @@ nsWebShell::LoadURL(const nsString& aURLSpec,
return rv;
}
}
// Stop any documents that are currently being loaded...
mDocLoader->Stop();
rv = mDocLoader->LoadURL(urlSpec, // URL string
nsnull, // Command
this, // Container
aPostData, // Post Data
nsnull, // Extra Info...
aObserver); // Observer
mObserver); // Observer
return rv;
}
NS_IMETHODIMP
nsWebShell::GoTo(PRInt32 aHistoryIndex, nsIStreamObserver* aObserver)
nsWebShell::GoTo(PRInt32 aHistoryIndex)
{
nsresult rv = NS_ERROR_ILLEGAL_VALUE;
if ((aHistoryIndex >= 0) &&
@@ -683,12 +708,16 @@ nsWebShell::GoTo(PRInt32 aHistoryIndex, nsIStreamObserver* aObserver)
return rv;
}
}
// Stop any documents that are currently being loaded...
mDocLoader->Stop();
rv = mDocLoader->LoadURL(urlSpec, // URL string
nsnull, // Command
this, // Container
nsnull, // Post Data
nsnull, // Extra Info...
aObserver); // Observer
mObserver); // Observer
}
return rv;
}
@@ -904,7 +933,7 @@ nsWebShell::HandleLinkClickEvent(const nsString& aURLSpec,
{
nsIWebShell* shell = GetTarget(aTargetSpec);
if (nsnull != shell) {
shell->LoadURL(aURLSpec, nsnull, aPostData);
shell->LoadURL(aURLSpec, aPostData);
}
}