Bug 1261632 - Assert that OnStopRequest is called only once. r=michal

--HG--
extra : rebase_source : fef5faba65c878b3f3528de054a0601c3ad74035
This commit is contained in:
Dragana Damjanovic dd.mozilla@gmail.com 2016-04-06 04:47:00 -04:00
parent efe5b47ede
commit 5d5fb10507
4 changed files with 15 additions and 2 deletions

View File

@ -103,6 +103,7 @@ HttpBaseChannel::HttpBaseChannel()
, mRedirectMode(nsIHttpChannelInternal::REDIRECT_MODE_FOLLOW)
, mFetchCacheMode(nsIHttpChannelInternal::FETCH_CACHE_MODE_DEFAULT)
, mOnStartRequestCalled(false)
, mOnStopRequestCalled(false)
, mTransferSize(0)
, mDecodedBodySize(0)
, mEncodedBodySize(0)
@ -2614,8 +2615,13 @@ HttpBaseChannel::DoNotifyListener()
mIsPending = false;
if (mListener) {
MOZ_ASSERT(!mOnStopRequestCalled,
"We should not call OnStopRequest twice");
nsCOMPtr<nsIStreamListener> listener = mListener;
listener->OnStopRequest(this, mListenerContext, mStatus);
mOnStopRequestCalled = true;
}
// We have to make sure to drop the references to listeners and callbacks

View File

@ -491,9 +491,10 @@ protected:
uint32_t mRedirectMode;
uint32_t mFetchCacheMode;
// This parameter is used to ensure that we do not call OnStartRequest more
// than once.
// These parameters are used to ensure that we do not call OnStartRequest and
// OnStopRequest more than once.
bool mOnStartRequestCalled;
bool mOnStopRequestCalled;
uint64_t mTransferSize;
uint64_t mDecodedBodySize;

View File

@ -942,7 +942,10 @@ HttpChannelChild::DoOnStopRequest(nsIRequest* aRequest, nsresult aChannelStatus,
nsChannelClassifier::SetBlockedTrackingContent(this);
}
MOZ_ASSERT(!mOnStopRequestCalled,
"We should not call OnStopRequest twice");
mListener->OnStopRequest(aRequest, aContext, mStatus);
mOnStopRequestCalled = true;
mListener = 0;
mListenerContext = 0;

View File

@ -6179,7 +6179,10 @@ nsHttpChannel::OnStopRequest(nsIRequest *request, nsISupports *ctxt, nsresult st
if (mListener) {
LOG((" calling OnStopRequest\n"));
MOZ_ASSERT(!mOnStopRequestCalled,
"We should not call OnStopRequest twice");
mListener->OnStopRequest(this, mListenerContext, status);
mOnStopRequestCalled = true;
}
CloseCacheEntry(!contentComplete);