Bug 1185820 - XMLHttpRequest::Open() in worker should count the recursion using a uint32_t and not a boolean. r=khuey

This commit is contained in:
Andrea Marchesini 2015-07-29 16:10:15 -04:00
parent 5eb917283b
commit 489b618a01

View File

@ -103,6 +103,7 @@ public:
// Only touched on the worker thread.
uint32_t mOuterEventStreamId;
uint32_t mOuterChannelId;
uint32_t mOpenCount;
uint64_t mLastLoaded;
uint64_t mLastTotal;
uint64_t mLastUploadLoaded;
@ -112,7 +113,6 @@ public:
bool mLastUploadLengthComputable;
bool mSeenLoadStart;
bool mSeenUploadLoadStart;
bool mOpening;
// Only touched on the main thread.
bool mUploadEventListenersAttached;
@ -125,10 +125,10 @@ public:
: mWorkerPrivate(nullptr), mXMLHttpRequestPrivate(aXHRPrivate),
mMozAnon(aMozAnon), mMozSystem(aMozSystem),
mInnerEventStreamId(0), mInnerChannelId(0), mOutstandingSendCount(0),
mOuterEventStreamId(0), mOuterChannelId(0), mLastLoaded(0), mLastTotal(0),
mLastUploadLoaded(0), mLastUploadTotal(0), mIsSyncXHR(false),
mOuterEventStreamId(0), mOuterChannelId(0), mOpenCount(0), mLastLoaded(0),
mLastTotal(0), mLastUploadLoaded(0), mLastUploadTotal(0), mIsSyncXHR(false),
mLastLengthComputable(false), mLastUploadLengthComputable(false),
mSeenLoadStart(false), mSeenUploadLoadStart(false), mOpening(false),
mSeenLoadStart(false), mSeenUploadLoadStart(false),
mUploadEventListenersAttached(false), mMainThreadSeenLoadStart(false),
mInOpen(false), mArrayBufferResponseWasTransferred(false)
{ }
@ -1859,7 +1859,7 @@ XMLHttpRequest::SendInternal(const nsAString& aStringBody,
mWorkerPrivate->AssertIsOnWorkerThread();
// No send() calls when open is running.
if (mProxy->mOpening) {
if (mProxy->mOpenCount) {
aRv.Throw(NS_ERROR_FAILURE);
return;
}
@ -1954,15 +1954,17 @@ XMLHttpRequest::Open(const nsACString& aMethod, const nsAString& aUrl,
mBackgroundRequest, mWithCredentials,
mTimeout);
mProxy->mOpening = true;
++mProxy->mOpenCount;
if (!runnable->Dispatch(mWorkerPrivate->GetJSContext())) {
mProxy->mOpening = false;
ReleaseProxy();
if (!--mProxy->mOpenCount) {
ReleaseProxy();
}
aRv.Throw(NS_ERROR_FAILURE);
return;
}
mProxy->mOpening = false;
--mProxy->mOpenCount;
mProxy->mIsSyncXHR = !aAsync;
}