зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1251697 part 1. Thread an ErrorResult reference through the worker XHR WorkerThreadProxySyncRunnable implementations. r=khuey
This commit is contained in:
Родитель
0f5040d0b3
Коммит
3a49fc3ea3
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче