Added GetDocumentLoader(...) and support for creating nested document loaders if the webshell is nested itself...
This commit is contained in:
@@ -99,6 +99,7 @@ public:
|
||||
NS_IMETHOD GetContainer(nsIWebShellContainer*& aResult);
|
||||
NS_IMETHOD SetObserver(nsIStreamObserver* anObserver);
|
||||
NS_IMETHOD GetObserver(nsIStreamObserver*& aResult);
|
||||
NS_IMETHOD GetDocumentLoader(nsIDocumentLoader*& aResult);
|
||||
NS_IMETHOD GetRootWebShell(nsIWebShell*& aResult);
|
||||
NS_IMETHOD SetParent(nsIWebShell* aParent);
|
||||
NS_IMETHOD GetParent(nsIWebShell*& aParent);
|
||||
@@ -210,6 +211,10 @@ nsWebShell::nsWebShell()
|
||||
|
||||
nsWebShell::~nsWebShell()
|
||||
{
|
||||
// Stop any pending document loads and destroy the loader...
|
||||
mDocLoader->Stop();
|
||||
NS_IF_RELEASE(mDocLoader);
|
||||
|
||||
NS_IF_RELEASE(mInnerWindow);
|
||||
|
||||
NS_IF_RELEASE(mContentViewer);
|
||||
@@ -320,7 +325,7 @@ nsWebShell::Embed(nsIContentViewer* aContentViewer,
|
||||
mContentViewer->Show();
|
||||
}
|
||||
|
||||
// Now that we have switch documents, forget all of our children
|
||||
// Now that we have switched documents, forget all of our children
|
||||
ReleaseChildren();
|
||||
|
||||
return rv;
|
||||
@@ -334,17 +339,35 @@ nsWebShell::Init(nsNativeWidget aNativeParent,
|
||||
WEB_TRACE(WEB_TRACE_CALLS,
|
||||
("nsWebShell::Init: this=%p", this));
|
||||
|
||||
nsresult rv = NSRepository::CreateInstance(kDocumentLoaderCID,
|
||||
nsnull,
|
||||
kIDocumentLoaderIID,
|
||||
(void**)&mDocLoader);
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
// Initial error checking...
|
||||
NS_PRECONDITION(nsnull != aNativeParent, "null Parent Window");
|
||||
if (nsnull == aNativeParent) {
|
||||
rv = NS_ERROR_NULL_POINTER;
|
||||
goto done;
|
||||
}
|
||||
|
||||
// Create a document loader...
|
||||
if (nsnull != mParent) {
|
||||
nsIDocumentLoader* parentLoader;
|
||||
|
||||
// Create a child document loader...
|
||||
mParent->GetDocumentLoader(parentLoader);
|
||||
if (NS_OK == rv) {
|
||||
rv = parentLoader->CreateDocumentLoader(&mDocLoader);
|
||||
NS_RELEASE(parentLoader);
|
||||
}
|
||||
} else {
|
||||
rv = NSRepository::CreateInstance(kDocumentLoaderCID,
|
||||
nsnull,
|
||||
kIDocumentLoaderIID,
|
||||
(void**)&mDocLoader);
|
||||
}
|
||||
if (NS_OK != rv) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
// Create device context
|
||||
rv = NSRepository::CreateInstance(kDeviceContextCID, nsnull,
|
||||
kIDeviceContextIID,
|
||||
@@ -503,6 +526,15 @@ nsWebShell::GetObserver(nsIStreamObserver*& aResult)
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsWebShell::GetDocumentLoader(nsIDocumentLoader*& aResult)
|
||||
{
|
||||
aResult = mDocLoader;
|
||||
NS_IF_ADDREF(mDocLoader);
|
||||
return (nsnull != mDocLoader) ? NS_OK : NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
nsresult
|
||||
nsWebShell::GetRootWebShell(nsIWebShell*& aResult)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user