1 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
4 * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef mozilla_dom_workers_xmlhttprequest_h__
7 #define mozilla_dom_workers_xmlhttprequest_h__
9 #include "mozilla/dom/workers/bindings/WorkerFeature.h"
11 // Need this for XMLHttpRequestResponseType.
12 #include "mozilla/dom/XMLHttpRequestBinding.h"
14 #include "mozilla/dom/TypedArray.h"
16 #include "js/StructuredClone.h"
17 #include "nsXMLHttpRequest.h"
19 BEGIN_WORKERS_NAMESPACE
22 class XMLHttpRequestUpload
;
25 class XMLHttpRequest MOZ_FINAL
: public nsXHREventTarget
,
31 nsString mResponseText
;
32 nsString mResponseURL
;
34 nsCString mStatusText
;
36 JS::Heap
<JS::Value
> mResponse
;
37 nsresult mResponseTextResult
;
38 nsresult mStatusResult
;
39 nsresult mResponseResult
;
42 : mStatus(0), mReadyState(0), mResponse(JSVAL_VOID
),
43 mResponseTextResult(NS_OK
), mStatusResult(NS_OK
),
44 mResponseResult(NS_OK
)
49 nsRefPtr
<XMLHttpRequestUpload
> mUpload
;
50 WorkerPrivate
* mWorkerPrivate
;
51 nsRefPtr
<Proxy
> mProxy
;
52 XMLHttpRequestResponseType mResponseType
;
58 bool mBackgroundRequest
;
59 bool mWithCredentials
;
67 WrapObject(JSContext
* aCx
) MOZ_OVERRIDE
;
69 NS_DECL_ISUPPORTS_INHERITED
70 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(XMLHttpRequest
,
74 GetParentObject() const
76 // There's only one global on a worker, so we don't need to specify.
80 static already_AddRefed
<XMLHttpRequest
>
81 Constructor(const GlobalObject
& aGlobal
,
82 const MozXMLHttpRequestParameters
& aParams
,
85 static already_AddRefed
<XMLHttpRequest
>
86 Constructor(const GlobalObject
& aGlobal
, const nsAString
& ignored
,
89 // Pretend like someone passed null, so we can pick up the default values
90 MozXMLHttpRequestParameters params
;
91 if (!params
.Init(aGlobal
.Context(), JS::NullHandleValue
)) {
92 aRv
.Throw(NS_ERROR_UNEXPECTED
);
96 return Constructor(aGlobal
, params
, aRv
);
103 Notify(JSContext
* aCx
, Status aStatus
) MOZ_OVERRIDE
;
105 IMPL_EVENT_HANDLER(readystatechange
)
110 return mStateData
.mReadyState
;
113 void Open(const nsACString
& aMethod
, const nsAString
& aUrl
, ErrorResult
& aRv
)
115 Open(aMethod
, aUrl
, true, Optional
<nsAString
>(),
116 Optional
<nsAString
>(), aRv
);
119 Open(const nsACString
& aMethod
, const nsAString
& aUrl
, bool aAsync
,
120 const Optional
<nsAString
>& aUser
, const Optional
<nsAString
>& aPassword
,
124 SetRequestHeader(const nsACString
& aHeader
, const nsACString
& aValue
,
134 SetTimeout(uint32_t aTimeout
, ErrorResult
& aRv
);
137 WithCredentials() const
139 return mWithCredentials
;
143 SetWithCredentials(bool aWithCredentials
, ErrorResult
& aRv
);
146 MozBackgroundRequest() const
148 return mBackgroundRequest
;
152 SetMozBackgroundRequest(bool aBackgroundRequest
, ErrorResult
& aRv
);
154 XMLHttpRequestUpload
*
155 GetUpload(ErrorResult
& aRv
);
158 Send(ErrorResult
& aRv
);
161 Send(const nsAString
& aBody
, ErrorResult
& aRv
);
164 Send(JS::Handle
<JSObject
*> aBody
, ErrorResult
& aRv
);
167 Send(const ArrayBuffer
& aBody
, ErrorResult
& aRv
);
170 Send(const ArrayBufferView
& aBody
, ErrorResult
& aRv
);
173 SendAsBinary(const nsAString
& aBody
, ErrorResult
& aRv
);
176 Abort(ErrorResult
& aRv
);
179 GetResponseURL(nsAString
& aUrl
) const
181 aUrl
= mStateData
.mResponseURL
;
185 GetStatus(ErrorResult
& aRv
) const
187 aRv
= mStateData
.mStatusResult
;
188 return mStateData
.mStatus
;
192 GetStatusText(nsACString
& aStatusText
) const
194 aStatusText
= mStateData
.mStatusText
;
198 GetResponseHeader(const nsACString
& aHeader
, nsACString
& aResponseHeader
,
202 GetAllResponseHeaders(nsACString
& aResponseHeaders
, ErrorResult
& aRv
);
205 OverrideMimeType(const nsAString
& aMimeType
, ErrorResult
& aRv
);
207 XMLHttpRequestResponseType
210 return mResponseType
;
214 SetResponseType(XMLHttpRequestResponseType aResponseType
, ErrorResult
& aRv
);
217 GetResponse(JSContext
* /* unused */, JS::MutableHandle
<JS::Value
> aResponse
,
221 GetResponseText(nsAString
& aResponseText
, ErrorResult
& aRv
);
224 GetInterface(JSContext
* cx
, JS::Handle
<JSObject
*> aIID
,
225 JS::MutableHandle
<JS::Value
> aRetval
, ErrorResult
& aRv
)
227 aRv
.Throw(NS_ERROR_FAILURE
);
230 XMLHttpRequestUpload
*
231 GetUploadObjectNoCreate() const
237 UpdateState(const StateData
& aStateData
, bool aUseCachedArrayBufferResponse
);
242 mStateData
.mResponseText
.SetIsVoid(true);
243 mStateData
.mResponse
= JSVAL_NULL
;
251 bool MozSystem() const
257 SendInProgress() const
263 XMLHttpRequest(WorkerPrivate
* aWorkerPrivate
);
266 enum ReleaseType
{ Default
, XHRIsGoingAway
, WorkerIsGoingAway
};
269 ReleaseProxy(ReleaseType aType
= Default
);
272 MaybePin(ErrorResult
& aRv
);
275 MaybeDispatchPrematureAbortEvents(ErrorResult
& aRv
);
278 DispatchPrematureAbortEvent(EventTarget
* aTarget
,
279 const nsAString
& aEventType
, bool aUploadTarget
,
283 SendInternal(const nsAString
& aStringBody
,
284 JSAutoStructuredCloneBuffer
&& aBody
,
285 nsTArray
<nsCOMPtr
<nsISupports
> >& aClonedObjects
,
289 END_WORKERS_NAMESPACE
291 #endif // mozilla_dom_workers_xmlhttprequest_h__