Bumping manifests a=b2g-bump
[gecko.git] / dom / workers / XMLHttpRequest.h
blob100f5fad1260ba40fa44fa89b9b9a26835be30df
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
21 class Proxy;
22 class XMLHttpRequestUpload;
23 class WorkerPrivate;
25 class XMLHttpRequest MOZ_FINAL: public nsXHREventTarget,
26 public WorkerFeature
28 public:
29 struct StateData
31 nsString mResponseText;
32 nsString mResponseURL;
33 uint32_t mStatus;
34 nsCString mStatusText;
35 uint16_t mReadyState;
36 JS::Heap<JS::Value> mResponse;
37 nsresult mResponseTextResult;
38 nsresult mStatusResult;
39 nsresult mResponseResult;
41 StateData()
42 : mStatus(0), mReadyState(0), mResponse(JSVAL_VOID),
43 mResponseTextResult(NS_OK), mStatusResult(NS_OK),
44 mResponseResult(NS_OK)
45 { }
48 private:
49 nsRefPtr<XMLHttpRequestUpload> mUpload;
50 WorkerPrivate* mWorkerPrivate;
51 nsRefPtr<Proxy> mProxy;
52 XMLHttpRequestResponseType mResponseType;
53 StateData mStateData;
55 uint32_t mTimeout;
57 bool mRooted;
58 bool mBackgroundRequest;
59 bool mWithCredentials;
60 bool mCanceled;
62 bool mMozAnon;
63 bool mMozSystem;
65 public:
66 virtual JSObject*
67 WrapObject(JSContext* aCx) MOZ_OVERRIDE;
69 NS_DECL_ISUPPORTS_INHERITED
70 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(XMLHttpRequest,
71 nsXHREventTarget)
73 nsISupports*
74 GetParentObject() const
76 // There's only one global on a worker, so we don't need to specify.
77 return nullptr;
80 static already_AddRefed<XMLHttpRequest>
81 Constructor(const GlobalObject& aGlobal,
82 const MozXMLHttpRequestParameters& aParams,
83 ErrorResult& aRv);
85 static already_AddRefed<XMLHttpRequest>
86 Constructor(const GlobalObject& aGlobal, const nsAString& ignored,
87 ErrorResult& aRv)
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);
93 return nullptr;
96 return Constructor(aGlobal, params, aRv);
99 void
100 Unpin();
102 bool
103 Notify(JSContext* aCx, Status aStatus) MOZ_OVERRIDE;
105 IMPL_EVENT_HANDLER(readystatechange)
107 uint16_t
108 ReadyState() const
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);
118 void
119 Open(const nsACString& aMethod, const nsAString& aUrl, bool aAsync,
120 const Optional<nsAString>& aUser, const Optional<nsAString>& aPassword,
121 ErrorResult& aRv);
123 void
124 SetRequestHeader(const nsACString& aHeader, const nsACString& aValue,
125 ErrorResult& aRv);
127 uint32_t
128 Timeout() const
130 return mTimeout;
133 void
134 SetTimeout(uint32_t aTimeout, ErrorResult& aRv);
136 bool
137 WithCredentials() const
139 return mWithCredentials;
142 void
143 SetWithCredentials(bool aWithCredentials, ErrorResult& aRv);
145 bool
146 MozBackgroundRequest() const
148 return mBackgroundRequest;
151 void
152 SetMozBackgroundRequest(bool aBackgroundRequest, ErrorResult& aRv);
154 XMLHttpRequestUpload*
155 GetUpload(ErrorResult& aRv);
157 void
158 Send(ErrorResult& aRv);
160 void
161 Send(const nsAString& aBody, ErrorResult& aRv);
163 void
164 Send(JS::Handle<JSObject*> aBody, ErrorResult& aRv);
166 void
167 Send(const ArrayBuffer& aBody, ErrorResult& aRv);
169 void
170 Send(const ArrayBufferView& aBody, ErrorResult& aRv);
172 void
173 SendAsBinary(const nsAString& aBody, ErrorResult& aRv);
175 void
176 Abort(ErrorResult& aRv);
178 void
179 GetResponseURL(nsAString& aUrl) const
181 aUrl = mStateData.mResponseURL;
184 uint16_t
185 GetStatus(ErrorResult& aRv) const
187 aRv = mStateData.mStatusResult;
188 return mStateData.mStatus;
191 void
192 GetStatusText(nsACString& aStatusText) const
194 aStatusText = mStateData.mStatusText;
197 void
198 GetResponseHeader(const nsACString& aHeader, nsACString& aResponseHeader,
199 ErrorResult& aRv);
201 void
202 GetAllResponseHeaders(nsACString& aResponseHeaders, ErrorResult& aRv);
204 void
205 OverrideMimeType(const nsAString& aMimeType, ErrorResult& aRv);
207 XMLHttpRequestResponseType
208 ResponseType() const
210 return mResponseType;
213 void
214 SetResponseType(XMLHttpRequestResponseType aResponseType, ErrorResult& aRv);
216 void
217 GetResponse(JSContext* /* unused */, JS::MutableHandle<JS::Value> aResponse,
218 ErrorResult& aRv);
220 void
221 GetResponseText(nsAString& aResponseText, ErrorResult& aRv);
223 void
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
233 return mUpload;
236 void
237 UpdateState(const StateData& aStateData, bool aUseCachedArrayBufferResponse);
239 void
240 NullResponseText()
242 mStateData.mResponseText.SetIsVoid(true);
243 mStateData.mResponse = JSVAL_NULL;
246 bool MozAnon() const
248 return mMozAnon;
251 bool MozSystem() const
253 return mMozSystem;
256 bool
257 SendInProgress() const
259 return mRooted;
262 private:
263 XMLHttpRequest(WorkerPrivate* aWorkerPrivate);
264 ~XMLHttpRequest();
266 enum ReleaseType { Default, XHRIsGoingAway, WorkerIsGoingAway };
268 void
269 ReleaseProxy(ReleaseType aType = Default);
271 void
272 MaybePin(ErrorResult& aRv);
274 void
275 MaybeDispatchPrematureAbortEvents(ErrorResult& aRv);
277 void
278 DispatchPrematureAbortEvent(EventTarget* aTarget,
279 const nsAString& aEventType, bool aUploadTarget,
280 ErrorResult& aRv);
282 void
283 SendInternal(const nsAString& aStringBody,
284 JSAutoStructuredCloneBuffer&& aBody,
285 nsTArray<nsCOMPtr<nsISupports> >& aClonedObjects,
286 ErrorResult& aRv);
289 END_WORKERS_NAMESPACE
291 #endif // mozilla_dom_workers_xmlhttprequest_h__