Bug 1251697 part 1. Thread an ErrorResult reference through the worker XHR WorkerThreadProxySyncRunnable implementations. r=khuey

This commit is contained in:
Boris Zbarsky 2016-02-26 21:15:57 -05:00
Родитель 0f5040d0b3
Коммит 3a49fc3ea3
1 изменённых файлов: 59 добавлений и 42 удалений

Просмотреть файл

@ -181,6 +181,9 @@ protected:
WorkerPrivate* mWorkerPrivate;
RefPtr<Proxy> mProxy;
nsCOMPtr<nsIEventTarget> mSyncLoopTarget;
// mRv is set on the worker thread by the constructor. Must not be touched on
// the main thread, except for copying the reference to the ResponseRunnable.
ErrorResult& mRv;
private:
class ResponseRunnable final: public MainThreadStopSyncLoopRunnable
@ -212,8 +215,9 @@ private:
};
public:
WorkerThreadProxySyncRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy)
: mWorkerPrivate(aWorkerPrivate), mProxy(aProxy)
WorkerThreadProxySyncRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy,
ErrorResult& aRv)
: mWorkerPrivate(aWorkerPrivate), mProxy(aProxy), mRv(aRv)
{
MOZ_ASSERT(aWorkerPrivate);
MOZ_ASSERT(aProxy);
@ -258,8 +262,8 @@ class SendRunnable final
public:
SendRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy,
const nsAString& aStringBody)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy)
const nsAString& aStringBody, ErrorResult& aRv)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy, aRv)
, StructuredCloneHolder(CloningSupported, TransferringNotSupported,
SameProcessDifferentThread)
, mStringBody(aStringBody)
@ -608,8 +612,9 @@ private:
class SyncTeardownRunnable final : public WorkerThreadProxySyncRunnable
{
public:
SyncTeardownRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy)
SyncTeardownRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy,
ErrorResult& aRv)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy, aRv)
{ }
private:
@ -632,8 +637,8 @@ class SetBackgroundRequestRunnable final :
public:
SetBackgroundRequestRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy,
bool aValue)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy), mValue(aValue)
bool aValue, ErrorResult& aRv)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy, aRv), mValue(aValue)
{ }
private:
@ -654,8 +659,8 @@ class SetWithCredentialsRunnable final :
public:
SetWithCredentialsRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy,
bool aValue)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy), mValue(aValue)
bool aValue, ErrorResult& aRv)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy, aRv), mValue(aValue)
{ }
private:
@ -675,8 +680,8 @@ class SetResponseTypeRunnable final : public WorkerThreadProxySyncRunnable
public:
SetResponseTypeRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy,
const nsAString& aResponseType)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy),
const nsAString& aResponseType, ErrorResult& aRv)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy, aRv),
mResponseType(aResponseType)
{ }
@ -708,8 +713,9 @@ class SetTimeoutRunnable final : public WorkerThreadProxySyncRunnable
public:
SetTimeoutRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy,
uint32_t aTimeout)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy), mTimeout(aTimeout)
uint32_t aTimeout, ErrorResult& aRv)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy, aRv),
mTimeout(aTimeout)
{ }
private:
@ -726,8 +732,8 @@ private:
class AbortRunnable final : public WorkerThreadProxySyncRunnable
{
public:
AbortRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy)
AbortRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy, ErrorResult& aRv)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy, aRv)
{ }
private:
@ -745,8 +751,8 @@ class GetAllResponseHeadersRunnable final :
public:
GetAllResponseHeadersRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy,
nsCString& aResponseHeaders)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy),
nsCString& aResponseHeaders, ErrorResult& aRv)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy, aRv),
mResponseHeaders(aResponseHeaders)
{ }
@ -769,8 +775,10 @@ class GetResponseHeaderRunnable final : public WorkerThreadProxySyncRunnable
public:
GetResponseHeaderRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy,
const nsACString& aHeader, nsCString& aValue)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy), mHeader(aHeader),
const nsACString& aHeader, nsCString& aValue,
ErrorResult& aRv)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy, aRv),
mHeader(aHeader),
mValue(aValue)
{ }
@ -803,8 +811,9 @@ public:
const Optional<nsAString>& aUser,
const Optional<nsAString>& aPassword,
bool aBackgroundRequest, bool aWithCredentials,
uint32_t aTimeout)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy), mMethod(aMethod),
uint32_t aTimeout, ErrorResult& aRv)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy, aRv),
mMethod(aMethod),
mURL(aURL), mBackgroundRequest(aBackgroundRequest),
mWithCredentials(aWithCredentials), mTimeout(aTimeout)
{
@ -845,8 +854,10 @@ class SetRequestHeaderRunnable final : public WorkerThreadProxySyncRunnable
public:
SetRequestHeaderRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy,
const nsACString& aHeader, const nsACString& aValue)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy), mHeader(aHeader),
const nsACString& aHeader, const nsACString& aValue,
ErrorResult& aRv)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy, aRv),
mHeader(aHeader),
mValue(aValue)
{ }
@ -867,8 +878,9 @@ class OverrideMimeTypeRunnable final : public WorkerThreadProxySyncRunnable
public:
OverrideMimeTypeRunnable(WorkerPrivate* aWorkerPrivate, Proxy* aProxy,
const nsAString& aMimeType)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy), mMimeType(aMimeType)
const nsAString& aMimeType, ErrorResult& aRv)
: WorkerThreadProxySyncRunnable(aWorkerPrivate, aProxy, aRv),
mMimeType(aMimeType)
{ }
private:
@ -1683,8 +1695,9 @@ XMLHttpRequest::ReleaseProxy(ReleaseType aType)
}
// We need to make a sync call here.
ErrorResult ignored;
RefPtr<SyncTeardownRunnable> runnable =
new SyncTeardownRunnable(mWorkerPrivate, mProxy);
new SyncTeardownRunnable(mWorkerPrivate, mProxy, ignored);
mProxy = nullptr;
if (!runnable->Dispatch()) {
@ -1931,7 +1944,7 @@ XMLHttpRequest::Open(const nsACString& aMethod, const nsAString& aUrl,
RefPtr<OpenRunnable> runnable =
new OpenRunnable(mWorkerPrivate, mProxy, aMethod, aUrl, aUser, aPassword,
mBackgroundRequest, mWithCredentials,
mTimeout);
mTimeout, aRv);
++mProxy->mOpenCount;
if (!runnable->Dispatch()) {
@ -1970,7 +1983,7 @@ XMLHttpRequest::SetRequestHeader(const nsACString& aHeader,
}
RefPtr<SetRequestHeaderRunnable> runnable =
new SetRequestHeaderRunnable(mWorkerPrivate, mProxy, aHeader, aValue);
new SetRequestHeaderRunnable(mWorkerPrivate, mProxy, aHeader, aValue, aRv);
if (!runnable->Dispatch()) {
aRv.Throw(NS_ERROR_FAILURE);
return;
@ -1996,7 +2009,7 @@ XMLHttpRequest::SetTimeout(uint32_t aTimeout, ErrorResult& aRv)
}
RefPtr<SetTimeoutRunnable> runnable =
new SetTimeoutRunnable(mWorkerPrivate, mProxy, aTimeout);
new SetTimeoutRunnable(mWorkerPrivate, mProxy, aTimeout, aRv);
if (!runnable->Dispatch()) {
aRv.Throw(NS_ERROR_FAILURE);
return;
@ -2022,7 +2035,8 @@ XMLHttpRequest::SetWithCredentials(bool aWithCredentials, ErrorResult& aRv)
}
RefPtr<SetWithCredentialsRunnable> runnable =
new SetWithCredentialsRunnable(mWorkerPrivate, mProxy, aWithCredentials);
new SetWithCredentialsRunnable(mWorkerPrivate, mProxy, aWithCredentials,
aRv);
if (!runnable->Dispatch()) {
aRv.Throw(NS_ERROR_FAILURE);
return;
@ -2050,7 +2064,7 @@ XMLHttpRequest::SetMozBackgroundRequest(bool aBackgroundRequest,
RefPtr<SetBackgroundRequestRunnable> runnable =
new SetBackgroundRequestRunnable(mWorkerPrivate, mProxy,
aBackgroundRequest);
aBackgroundRequest, aRv);
if (!runnable->Dispatch()) {
aRv.Throw(NS_ERROR_FAILURE);
return;
@ -2095,7 +2109,7 @@ XMLHttpRequest::Send(ErrorResult& aRv)
}
RefPtr<SendRunnable> sendRunnable =
new SendRunnable(mWorkerPrivate, mProxy, NullString());
new SendRunnable(mWorkerPrivate, mProxy, NullString(), aRv);
// Nothing to clone.
SendInternal(sendRunnable, aRv);
@ -2117,7 +2131,7 @@ XMLHttpRequest::Send(const nsAString& aBody, ErrorResult& aRv)
}
RefPtr<SendRunnable> sendRunnable =
new SendRunnable(mWorkerPrivate, mProxy, aBody);
new SendRunnable(mWorkerPrivate, mProxy, aBody, aRv);
// Nothing to clone.
SendInternal(sendRunnable, aRv);
@ -2157,7 +2171,7 @@ XMLHttpRequest::Send(JS::Handle<JSObject*> aBody, ErrorResult& aRv)
}
RefPtr<SendRunnable> sendRunnable =
new SendRunnable(mWorkerPrivate, mProxy, EmptyString());
new SendRunnable(mWorkerPrivate, mProxy, EmptyString(), aRv);
sendRunnable->Write(cx, valToClone, aRv);
if (NS_WARN_IF(aRv.Failed())) {
@ -2198,7 +2212,7 @@ XMLHttpRequest::Send(Blob& aBody, ErrorResult& aRv)
}
RefPtr<SendRunnable> sendRunnable =
new SendRunnable(mWorkerPrivate, mProxy, EmptyString());
new SendRunnable(mWorkerPrivate, mProxy, EmptyString(), aRv);
sendRunnable->Write(cx, value, aRv);
if (NS_WARN_IF(aRv.Failed())) {
@ -2231,7 +2245,7 @@ XMLHttpRequest::Send(FormData& aBody, ErrorResult& aRv)
}
RefPtr<SendRunnable> sendRunnable =
new SendRunnable(mWorkerPrivate, mProxy, EmptyString());
new SendRunnable(mWorkerPrivate, mProxy, EmptyString(), aRv);
sendRunnable->Write(cx, value, aRv);
if (NS_WARN_IF(aRv.Failed())) {
@ -2288,7 +2302,8 @@ XMLHttpRequest::Abort(ErrorResult& aRv)
mProxy->mOuterEventStreamId++;
RefPtr<AbortRunnable> runnable = new AbortRunnable(mWorkerPrivate, mProxy);
RefPtr<AbortRunnable> runnable =
new AbortRunnable(mWorkerPrivate, mProxy, aRv);
if (!runnable->Dispatch()) {
aRv.Throw(NS_ERROR_FAILURE);
return;
@ -2314,7 +2329,7 @@ XMLHttpRequest::GetResponseHeader(const nsACString& aHeader,
nsCString responseHeader;
RefPtr<GetResponseHeaderRunnable> runnable =
new GetResponseHeaderRunnable(mWorkerPrivate, mProxy, aHeader,
responseHeader);
responseHeader, aRv);
if (!runnable->Dispatch()) {
aRv.Throw(NS_ERROR_FAILURE);
return;
@ -2340,7 +2355,8 @@ XMLHttpRequest::GetAllResponseHeaders(nsACString& aResponseHeaders,
nsCString responseHeaders;
RefPtr<GetAllResponseHeadersRunnable> runnable =
new GetAllResponseHeadersRunnable(mWorkerPrivate, mProxy, responseHeaders);
new GetAllResponseHeadersRunnable(mWorkerPrivate, mProxy, responseHeaders,
aRv);
if (!runnable->Dispatch()) {
aRv.Throw(NS_ERROR_FAILURE);
return;
@ -2372,7 +2388,8 @@ XMLHttpRequest::OverrideMimeType(const nsAString& aMimeType, ErrorResult& aRv)
}
RefPtr<OverrideMimeTypeRunnable> runnable =
new OverrideMimeTypeRunnable(mWorkerPrivate, mProxy, aMimeType);
new OverrideMimeTypeRunnable(mWorkerPrivate, mProxy, aMimeType,
aRv);
if (!runnable->Dispatch()) {
aRv.Throw(NS_ERROR_FAILURE);
return;
@ -2407,7 +2424,7 @@ XMLHttpRequest::SetResponseType(XMLHttpRequestResponseType aResponseType,
ConvertResponseTypeToString(aResponseType, responseType);
RefPtr<SetResponseTypeRunnable> runnable =
new SetResponseTypeRunnable(mWorkerPrivate, mProxy, responseType);
new SetResponseTypeRunnable(mWorkerPrivate, mProxy, responseType, aRv);
if (!runnable->Dispatch()) {
aRv.Throw(NS_ERROR_FAILURE);
return;