mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
Starting to integrate the DocLoader and URI loader... Removed the Channel listener and the need for nsDocumentBindInfo objects. Now all URI loading is done by the URI loader.
This commit is contained in:
parent
24da9eddd8
commit
2331eb43cb
@ -101,24 +101,6 @@ static NS_DEFINE_CID(kGenericFactoryCID, NS_GENERICFACTORY_CID);
|
||||
class nsDocLoaderImpl;
|
||||
|
||||
|
||||
class nsChannelListener : public nsIStreamListener
|
||||
{
|
||||
public:
|
||||
nsChannelListener();
|
||||
|
||||
nsresult Init(nsIStreamListener *aListener);
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSISTREAMOBSERVER
|
||||
NS_DECL_NSISTREAMLISTENER
|
||||
|
||||
protected:
|
||||
virtual ~nsChannelListener();
|
||||
|
||||
nsCOMPtr<nsIStreamListener> mNextListener;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* The nsDocumentBindInfo contains the state required when a single document
|
||||
* is being loaded... Each instance remains alive until its target URL has
|
||||
@ -170,7 +152,6 @@ protected:
|
||||
|
||||
class nsDocLoaderImpl : public nsIDocumentLoader,
|
||||
public nsIStreamObserver,
|
||||
public nsILoadGroupListenerFactory,
|
||||
public nsSupportsWeakReference
|
||||
{
|
||||
public:
|
||||
@ -221,10 +202,6 @@ public:
|
||||
|
||||
NS_IMETHOD Destroy();
|
||||
|
||||
// nsILoadGroupListenerFactory methods...
|
||||
NS_IMETHOD CreateLoadGroupListener(nsIStreamListener *aListener,
|
||||
nsIStreamListener **aResult);
|
||||
|
||||
// nsIStreamObserver methods: (for observing the load group)
|
||||
NS_DECL_NSISTREAMOBSERVER
|
||||
|
||||
@ -315,8 +292,8 @@ nsDocLoaderImpl::Init(nsDocLoaderImpl *aParent)
|
||||
PR_LOG(gDocLoaderLog, PR_LOG_DEBUG,
|
||||
("DocLoader:%p: load group %x.\n", this, mLoadGroup.get()));
|
||||
|
||||
rv = mLoadGroup->SetGroupListenerFactory(this);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
/// rv = mLoadGroup->SetGroupListenerFactory(this);
|
||||
/// if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = NS_NewISupportsArray(getter_AddRefs(mChildList));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
@ -369,11 +346,6 @@ nsDocLoaderImpl::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
if (aIID.Equals(nsCOMTypeInfo<nsILoadGroupListenerFactory>::GetIID())) {
|
||||
*aInstancePtr = (void*)(nsILoadGroupListenerFactory*)this;
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
if (aIID.Equals(kIStreamObserverIID)) {
|
||||
*aInstancePtr = (void*)(nsIStreamObserver*)this;
|
||||
NS_ADDREF_THIS();
|
||||
@ -937,25 +909,6 @@ nsresult nsDocLoaderImpl::RemoveChildGroup(nsDocLoaderImpl* aLoader)
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDocLoaderImpl::CreateLoadGroupListener(nsIStreamListener *aListener,
|
||||
nsIStreamListener **aResult)
|
||||
{
|
||||
nsChannelListener *newListener;
|
||||
|
||||
NS_NEWXPCOM(newListener, nsChannelListener);
|
||||
if (nsnull == newListener) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
NS_ADDREF(newListener);
|
||||
newListener->Init(aListener);
|
||||
|
||||
*aResult = newListener;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
void nsDocLoaderImpl::DocLoaderIsEmpty(nsresult aStatus)
|
||||
{
|
||||
if (mParent) {
|
||||
@ -1512,110 +1465,6 @@ NS_METHOD nsDocumentBindInfo::OnStopRequest(nsIChannel* channel, nsISupports *ct
|
||||
|
||||
|
||||
|
||||
NS_IMPL_ISUPPORTS2(nsChannelListener, nsIStreamObserver, nsIStreamListener);
|
||||
|
||||
nsChannelListener::nsChannelListener()
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
nsresult nsChannelListener::Init(nsIStreamListener *aListener)
|
||||
{
|
||||
mNextListener = aListener;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsChannelListener::~nsChannelListener()
|
||||
{
|
||||
mNextListener = null_nsCOMPtr();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsChannelListener::OnStartRequest(nsIChannel *aChannel, nsISupports *aContext)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
///////////////////////////////
|
||||
// STREAM CONVERTERS
|
||||
///////////////////////////////
|
||||
|
||||
nsXPIDLCString contentType;
|
||||
rv = aChannel->GetContentType(getter_Copies(contentType));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
// if we are using the uri loader, it handles the stream converter work for us!
|
||||
|
||||
NS_WITH_SERVICE(nsIPref, prefs, kPrefServiceCID, &rv);
|
||||
PRBool useURILoader = PR_FALSE;
|
||||
if (NS_SUCCEEDED(rv))
|
||||
prefs->GetBoolPref("browser.uriloader", &useURILoader);
|
||||
|
||||
if (!useURILoader)
|
||||
{
|
||||
PRBool conversionRequired = PR_FALSE;
|
||||
nsAutoString from, to;
|
||||
|
||||
// Let's shanghai this channelListener's mNextListener if we want to convert the stream.
|
||||
if (!nsCRT::strcasecmp(contentType, "message/rfc822"))
|
||||
{
|
||||
from = "message/rfc822";
|
||||
to = "text/xul";
|
||||
conversionRequired = PR_TRUE;
|
||||
}
|
||||
else if (!nsCRT::strcasecmp(contentType, "multipart/x-mixed-replace"))
|
||||
{
|
||||
from = "multipart/x-mixed-replace";
|
||||
to = "text/html";
|
||||
conversionRequired = PR_TRUE;
|
||||
}
|
||||
|
||||
if (conversionRequired)
|
||||
{
|
||||
|
||||
NS_WITH_SERVICE(nsIStreamConverterService, StreamConvService, kStreamConverterServiceCID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
// The following call binds this channelListener's mNextListener (typically
|
||||
// the nsDocumentBindInfo) to the underlying stream converter, and returns
|
||||
// the underlying stream converter which we then set to be this channelListener's
|
||||
// mNextListener. This effectively nestles the stream converter down right
|
||||
// in between the raw stream and the final listener.
|
||||
nsIStreamListener *converterListener = nsnull;
|
||||
rv = StreamConvService->AsyncConvertData(from.GetUnicode(), to.GetUnicode(), mNextListener, aChannel,
|
||||
&converterListener);
|
||||
mNextListener = converterListener;
|
||||
NS_IF_RELEASE(converterListener);
|
||||
}
|
||||
}
|
||||
//////////////////////////////
|
||||
// END STREAM CONVERTERS
|
||||
//////////////////////////////
|
||||
|
||||
// Pass the notification to the next listener...
|
||||
return mNextListener->OnStartRequest(aChannel, aContext);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsChannelListener::OnStopRequest(nsIChannel *aChannel, nsISupports *aContext,
|
||||
nsresult aStatus, const PRUnichar *aMsg)
|
||||
{
|
||||
return mNextListener->OnStopRequest(aChannel, aContext, aStatus, aMsg);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsChannelListener::OnDataAvailable(nsIChannel *aChannel, nsISupports *aContext,
|
||||
nsIInputStream *aInStream, PRUint32 aOffset,
|
||||
PRUint32 aCount)
|
||||
{
|
||||
return mNextListener->OnDataAvailable(aChannel, aContext, aInStream,
|
||||
aOffset, aCount);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************
|
||||
* nsDocLoaderServiceFactory
|
||||
*******************************************/
|
||||
|
@ -101,24 +101,6 @@ static NS_DEFINE_CID(kGenericFactoryCID, NS_GENERICFACTORY_CID);
|
||||
class nsDocLoaderImpl;
|
||||
|
||||
|
||||
class nsChannelListener : public nsIStreamListener
|
||||
{
|
||||
public:
|
||||
nsChannelListener();
|
||||
|
||||
nsresult Init(nsIStreamListener *aListener);
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSISTREAMOBSERVER
|
||||
NS_DECL_NSISTREAMLISTENER
|
||||
|
||||
protected:
|
||||
virtual ~nsChannelListener();
|
||||
|
||||
nsCOMPtr<nsIStreamListener> mNextListener;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* The nsDocumentBindInfo contains the state required when a single document
|
||||
* is being loaded... Each instance remains alive until its target URL has
|
||||
@ -170,7 +152,6 @@ protected:
|
||||
|
||||
class nsDocLoaderImpl : public nsIDocumentLoader,
|
||||
public nsIStreamObserver,
|
||||
public nsILoadGroupListenerFactory,
|
||||
public nsSupportsWeakReference
|
||||
{
|
||||
public:
|
||||
@ -221,10 +202,6 @@ public:
|
||||
|
||||
NS_IMETHOD Destroy();
|
||||
|
||||
// nsILoadGroupListenerFactory methods...
|
||||
NS_IMETHOD CreateLoadGroupListener(nsIStreamListener *aListener,
|
||||
nsIStreamListener **aResult);
|
||||
|
||||
// nsIStreamObserver methods: (for observing the load group)
|
||||
NS_DECL_NSISTREAMOBSERVER
|
||||
|
||||
@ -315,8 +292,8 @@ nsDocLoaderImpl::Init(nsDocLoaderImpl *aParent)
|
||||
PR_LOG(gDocLoaderLog, PR_LOG_DEBUG,
|
||||
("DocLoader:%p: load group %x.\n", this, mLoadGroup.get()));
|
||||
|
||||
rv = mLoadGroup->SetGroupListenerFactory(this);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
/// rv = mLoadGroup->SetGroupListenerFactory(this);
|
||||
/// if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = NS_NewISupportsArray(getter_AddRefs(mChildList));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
@ -369,11 +346,6 @@ nsDocLoaderImpl::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
if (aIID.Equals(nsCOMTypeInfo<nsILoadGroupListenerFactory>::GetIID())) {
|
||||
*aInstancePtr = (void*)(nsILoadGroupListenerFactory*)this;
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
if (aIID.Equals(kIStreamObserverIID)) {
|
||||
*aInstancePtr = (void*)(nsIStreamObserver*)this;
|
||||
NS_ADDREF_THIS();
|
||||
@ -937,25 +909,6 @@ nsresult nsDocLoaderImpl::RemoveChildGroup(nsDocLoaderImpl* aLoader)
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDocLoaderImpl::CreateLoadGroupListener(nsIStreamListener *aListener,
|
||||
nsIStreamListener **aResult)
|
||||
{
|
||||
nsChannelListener *newListener;
|
||||
|
||||
NS_NEWXPCOM(newListener, nsChannelListener);
|
||||
if (nsnull == newListener) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
NS_ADDREF(newListener);
|
||||
newListener->Init(aListener);
|
||||
|
||||
*aResult = newListener;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
void nsDocLoaderImpl::DocLoaderIsEmpty(nsresult aStatus)
|
||||
{
|
||||
if (mParent) {
|
||||
@ -1512,110 +1465,6 @@ NS_METHOD nsDocumentBindInfo::OnStopRequest(nsIChannel* channel, nsISupports *ct
|
||||
|
||||
|
||||
|
||||
NS_IMPL_ISUPPORTS2(nsChannelListener, nsIStreamObserver, nsIStreamListener);
|
||||
|
||||
nsChannelListener::nsChannelListener()
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
nsresult nsChannelListener::Init(nsIStreamListener *aListener)
|
||||
{
|
||||
mNextListener = aListener;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsChannelListener::~nsChannelListener()
|
||||
{
|
||||
mNextListener = null_nsCOMPtr();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsChannelListener::OnStartRequest(nsIChannel *aChannel, nsISupports *aContext)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
///////////////////////////////
|
||||
// STREAM CONVERTERS
|
||||
///////////////////////////////
|
||||
|
||||
nsXPIDLCString contentType;
|
||||
rv = aChannel->GetContentType(getter_Copies(contentType));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
// if we are using the uri loader, it handles the stream converter work for us!
|
||||
|
||||
NS_WITH_SERVICE(nsIPref, prefs, kPrefServiceCID, &rv);
|
||||
PRBool useURILoader = PR_FALSE;
|
||||
if (NS_SUCCEEDED(rv))
|
||||
prefs->GetBoolPref("browser.uriloader", &useURILoader);
|
||||
|
||||
if (!useURILoader)
|
||||
{
|
||||
PRBool conversionRequired = PR_FALSE;
|
||||
nsAutoString from, to;
|
||||
|
||||
// Let's shanghai this channelListener's mNextListener if we want to convert the stream.
|
||||
if (!nsCRT::strcasecmp(contentType, "message/rfc822"))
|
||||
{
|
||||
from = "message/rfc822";
|
||||
to = "text/xul";
|
||||
conversionRequired = PR_TRUE;
|
||||
}
|
||||
else if (!nsCRT::strcasecmp(contentType, "multipart/x-mixed-replace"))
|
||||
{
|
||||
from = "multipart/x-mixed-replace";
|
||||
to = "text/html";
|
||||
conversionRequired = PR_TRUE;
|
||||
}
|
||||
|
||||
if (conversionRequired)
|
||||
{
|
||||
|
||||
NS_WITH_SERVICE(nsIStreamConverterService, StreamConvService, kStreamConverterServiceCID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
// The following call binds this channelListener's mNextListener (typically
|
||||
// the nsDocumentBindInfo) to the underlying stream converter, and returns
|
||||
// the underlying stream converter which we then set to be this channelListener's
|
||||
// mNextListener. This effectively nestles the stream converter down right
|
||||
// in between the raw stream and the final listener.
|
||||
nsIStreamListener *converterListener = nsnull;
|
||||
rv = StreamConvService->AsyncConvertData(from.GetUnicode(), to.GetUnicode(), mNextListener, aChannel,
|
||||
&converterListener);
|
||||
mNextListener = converterListener;
|
||||
NS_IF_RELEASE(converterListener);
|
||||
}
|
||||
}
|
||||
//////////////////////////////
|
||||
// END STREAM CONVERTERS
|
||||
//////////////////////////////
|
||||
|
||||
// Pass the notification to the next listener...
|
||||
return mNextListener->OnStartRequest(aChannel, aContext);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsChannelListener::OnStopRequest(nsIChannel *aChannel, nsISupports *aContext,
|
||||
nsresult aStatus, const PRUnichar *aMsg)
|
||||
{
|
||||
return mNextListener->OnStopRequest(aChannel, aContext, aStatus, aMsg);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsChannelListener::OnDataAvailable(nsIChannel *aChannel, nsISupports *aContext,
|
||||
nsIInputStream *aInStream, PRUint32 aOffset,
|
||||
PRUint32 aCount)
|
||||
{
|
||||
return mNextListener->OnDataAvailable(aChannel, aContext, aInStream,
|
||||
aOffset, aCount);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************
|
||||
* nsDocLoaderServiceFactory
|
||||
*******************************************/
|
||||
|
Loading…
Reference in New Issue
Block a user