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
: public nsXHREventTarget
,
31 nsString mResponseText
;
33 nsCString mStatusText
;
35 JS::Heap
<JS::Value
> mResponse
;
36 nsresult mResponseTextResult
;
37 nsresult mStatusResult
;
38 nsresult mResponseResult
;
41 : mStatus(0), mReadyState(0), mResponse(JSVAL_VOID
),
42 mResponseTextResult(NS_OK
), mStatusResult(NS_OK
),
43 mResponseResult(NS_OK
)
48 nsRefPtr
<XMLHttpRequestUpload
> mUpload
;
49 WorkerPrivate
* mWorkerPrivate
;
50 nsRefPtr
<Proxy
> mProxy
;
51 XMLHttpRequestResponseType mResponseType
;
57 bool mBackgroundRequest
;
58 bool mWithCredentials
;
65 XMLHttpRequest(WorkerPrivate
* aWorkerPrivate
);
66 virtual ~XMLHttpRequest();
70 WrapObject(JSContext
* aCx
, JS::Handle
<JSObject
*> aScope
) MOZ_OVERRIDE
;
72 NS_DECL_ISUPPORTS_INHERITED
73 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(XMLHttpRequest
,
77 GetParentObject() const
79 // There's only one global on a worker, so we don't need to specify.
83 static already_AddRefed
<XMLHttpRequest
>
84 Constructor(const GlobalObject
& aGlobal
,
85 const MozXMLHttpRequestParameters
& aParams
,
88 static already_AddRefed
<XMLHttpRequest
>
89 Constructor(const GlobalObject
& aGlobal
, const nsAString
& ignored
,
92 // Pretend like someone passed null, so we can pick up the default values
93 MozXMLHttpRequestParameters params
;
94 if (!params
.Init(aGlobal
.GetContext(), JS::NullHandleValue
)) {
95 aRv
.Throw(NS_ERROR_UNEXPECTED
);
99 return Constructor(aGlobal
, params
, aRv
);
106 Notify(JSContext
* aCx
, Status aStatus
) MOZ_OVERRIDE
;
108 IMPL_EVENT_HANDLER(readystatechange
)
113 return mStateData
.mReadyState
;
116 void Open(const nsACString
& aMethod
, const nsAString
& aUrl
, ErrorResult
& aRv
)
118 Open(aMethod
, aUrl
, true, Optional
<nsAString
>(),
119 Optional
<nsAString
>(), aRv
);
122 Open(const nsACString
& aMethod
, const nsAString
& aUrl
, bool aAsync
,
123 const Optional
<nsAString
>& aUser
, const Optional
<nsAString
>& aPassword
,
127 SetRequestHeader(const nsACString
& aHeader
, const nsACString
& aValue
,
137 SetTimeout(uint32_t aTimeout
, ErrorResult
& aRv
);
140 WithCredentials() const
142 return mWithCredentials
;
146 SetWithCredentials(bool aWithCredentials
, ErrorResult
& aRv
);
149 MozBackgroundRequest() const
151 return mBackgroundRequest
;
155 SetMozBackgroundRequest(bool aBackgroundRequest
, ErrorResult
& aRv
);
157 XMLHttpRequestUpload
*
158 GetUpload(ErrorResult
& aRv
);
161 Send(ErrorResult
& aRv
);
164 Send(const nsAString
& aBody
, ErrorResult
& aRv
);
167 Send(JSObject
* aBody
, ErrorResult
& aRv
);
170 Send(JSObject
& aBody
, ErrorResult
& aRv
)
176 Send(const ArrayBuffer
& aBody
, ErrorResult
& aRv
) {
177 return Send(aBody
.Obj(), aRv
);
181 Send(const ArrayBufferView
& aBody
, ErrorResult
& aRv
) {
182 return Send(aBody
.Obj(), aRv
);
186 SendAsBinary(const nsAString
& aBody
, ErrorResult
& aRv
);
189 Abort(ErrorResult
& aRv
);
192 GetStatus(ErrorResult
& aRv
) const
194 aRv
= mStateData
.mStatusResult
;
195 return mStateData
.mStatus
;
199 GetStatusText(nsACString
& aStatusText
) const
201 aStatusText
= mStateData
.mStatusText
;
205 GetResponseHeader(const nsACString
& aHeader
, nsACString
& aResponseHeader
,
209 GetAllResponseHeaders(nsACString
& aResponseHeaders
, ErrorResult
& aRv
);
212 OverrideMimeType(const nsAString
& aMimeType
, ErrorResult
& aRv
);
214 XMLHttpRequestResponseType
217 return mResponseType
;
221 SetResponseType(XMLHttpRequestResponseType aResponseType
, ErrorResult
& aRv
);
224 GetResponse(JSContext
* /* unused */, ErrorResult
& aRv
);
227 GetResponseText(nsAString
& aResponseText
, ErrorResult
& aRv
);
230 GetResponseXML() const
242 GetInterface(JSContext
* cx
, JS::Handle
<JSObject
*> aIID
, ErrorResult
& aRv
)
244 aRv
.Throw(NS_ERROR_FAILURE
);
248 XMLHttpRequestUpload
*
249 GetUploadObjectNoCreate() const
255 UpdateState(const StateData
& aStateData
);
260 mStateData
.mResponseText
.SetIsVoid(true);
261 mStateData
.mResponse
= JSVAL_NULL
;
269 bool MozSystem() const
275 enum ReleaseType
{ Default
, XHRIsGoingAway
, WorkerIsGoingAway
};
278 ReleaseProxy(ReleaseType aType
= Default
);
281 MaybePin(ErrorResult
& aRv
);
284 MaybeDispatchPrematureAbortEvents(ErrorResult
& aRv
);
287 DispatchPrematureAbortEvent(EventTarget
* aTarget
,
288 const nsAString
& aEventType
, bool aUploadTarget
,
292 SendInProgress() const
298 SendInternal(const nsAString
& aStringBody
,
299 JSAutoStructuredCloneBuffer
& aBody
,
300 nsTArray
<nsCOMPtr
<nsISupports
> >& aClonedObjects
,
304 END_WORKERS_NAMESPACE
306 #endif // mozilla_dom_workers_xmlhttprequest_h__