diff --git a/mozilla/netwerk/base/src/nsLoadGroup.cpp b/mozilla/netwerk/base/src/nsLoadGroup.cpp index f0fe6215137..6495691439e 100644 --- a/mozilla/netwerk/base/src/nsLoadGroup.cpp +++ b/mozilla/netwerk/base/src/nsLoadGroup.cpp @@ -56,7 +56,8 @@ PRLogModuleInfo* gLoadGroupLog = nsnull; nsLoadGroup::nsLoadGroup(nsISupports* outer) : mDefaultLoadAttributes(nsIChannel::LOAD_NORMAL), mForegroundCount(0), - mChannels(nsnull) + mChannels(nsnull), + mStatus(NS_OK) { NS_INIT_AGGREGATED(outer); @@ -186,7 +187,10 @@ nsLoadGroup::IsPending(PRBool *aResult) NS_IMETHODIMP nsLoadGroup::GetStatus(nsresult *status) { - *status = NS_OK; + if (NS_SUCCEEDED(mStatus) && mDefaultLoadChannel) + return mDefaultLoadChannel->GetStatus(status); + + *status = mStatus; return NS_OK; } @@ -197,6 +201,11 @@ nsLoadGroup::Cancel(nsresult status) nsresult rv, firstError; PRUint32 count; + // set the load group status to our cancel status while we cancel + // all our requests...once the cancel is done, we'll reset it... + + mStatus = status; + rv = mChannels->Count(&count); if (NS_FAILED(rv)) return rv; @@ -262,6 +271,7 @@ nsLoadGroup::Cancel(nsresult status) #endif /* DEBUG */ } + mStatus = NS_OK; return firstError; } diff --git a/mozilla/netwerk/base/src/nsLoadGroup.h b/mozilla/netwerk/base/src/nsLoadGroup.h index 793798846ff..94adcc8e0a1 100644 --- a/mozilla/netwerk/base/src/nsLoadGroup.h +++ b/mozilla/netwerk/base/src/nsLoadGroup.h @@ -72,6 +72,8 @@ protected: nsCOMPtr mDefaultLoadChannel; nsWeakPtr mGroupListenerFactory; + + nsresult mStatus; }; #endif // nsLoadGroup_h__ diff --git a/mozilla/uriloader/base/nsDocLoader.cpp b/mozilla/uriloader/base/nsDocLoader.cpp index b2df95805c0..3d8bce45901 100644 --- a/mozilla/uriloader/base/nsDocLoader.cpp +++ b/mozilla/uriloader/base/nsDocLoader.cpp @@ -595,6 +595,10 @@ void nsDocLoaderImpl::DocLoaderIsEmpty(nsresult aStatus) // Update the progress status state - the document is done mProgressStateFlags = nsIWebProgressListener::STATE_STOP; + + nsresult loadGroupStatus = NS_OK; + mLoadGroup->GetStatus(&loadGroupStatus); + // // New code to break the circular reference between // the load group and the docloader... @@ -606,11 +610,11 @@ void nsDocLoaderImpl::DocLoaderIsEmpty(nsresult aStatus) // loader may be loading a *new* document - if LoadDocument() // was called from a handler! // - doStopDocumentLoad(docChannel, aStatus); - FireOnEndDocumentLoad(this, docChannel, aStatus); + doStopDocumentLoad(docChannel, loadGroupStatus); + FireOnEndDocumentLoad(this, docChannel, loadGroupStatus); if (mParent) { - mParent->DocLoaderIsEmpty(aStatus); + mParent->DocLoaderIsEmpty(loadGroupStatus); } } }