Merge m-c to b2g-inbound.
[gecko.git] / dom / workers / XMLHttpRequest.h
blobc3aff3b8ae3af2f46d4b91343e7b90d4746c92ab
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 : public nsXHREventTarget,
26 public WorkerFeature
28 public:
29 struct StateData
31 nsString mResponseText;
32 uint32_t mStatus;
33 nsCString mStatusText;
34 uint16_t mReadyState;
35 JS::Heap<JS::Value> mResponse;
36 nsresult mResponseTextResult;
37 nsresult mStatusResult;
38 nsresult mResponseResult;
40 StateData()
41 : mStatus(0), mReadyState(0), mResponse(JSVAL_VOID),
42 mResponseTextResult(NS_OK), mStatusResult(NS_OK),
43 mResponseResult(NS_OK)
44 { }
47 private:
48 nsRefPtr<XMLHttpRequestUpload> mUpload;
49 WorkerPrivate* mWorkerPrivate;
50 nsRefPtr<Proxy> mProxy;
51 XMLHttpRequestResponseType mResponseType;
52 StateData mStateData;
54 uint32_t mTimeout;
56 bool mRooted;
57 bool mBackgroundRequest;
58 bool mWithCredentials;
59 bool mCanceled;
61 bool mMozAnon;
62 bool mMozSystem;
64 protected:
65 XMLHttpRequest(WorkerPrivate* aWorkerPrivate);
66 virtual ~XMLHttpRequest();
68 public:
69 virtual JSObject*
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,
74 nsXHREventTarget)
76 nsISupports*
77 GetParentObject() const
79 // There's only one global on a worker, so we don't need to specify.
80 return nullptr;
83 static already_AddRefed<XMLHttpRequest>
84 Constructor(const GlobalObject& aGlobal,
85 const MozXMLHttpRequestParameters& aParams,
86 ErrorResult& aRv);
88 static already_AddRefed<XMLHttpRequest>
89 Constructor(const GlobalObject& aGlobal, const nsAString& ignored,
90 ErrorResult& aRv)
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);
96 return nullptr;
99 return Constructor(aGlobal, params, aRv);
102 void
103 Unpin();
105 bool
106 Notify(JSContext* aCx, Status aStatus) MOZ_OVERRIDE;
108 IMPL_EVENT_HANDLER(readystatechange)
110 uint16_t
111 ReadyState() const
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);
121 void
122 Open(const nsACString& aMethod, const nsAString& aUrl, bool aAsync,
123 const Optional<nsAString>& aUser, const Optional<nsAString>& aPassword,
124 ErrorResult& aRv);
126 void
127 SetRequestHeader(const nsACString& aHeader, const nsACString& aValue,
128 ErrorResult& aRv);
130 uint32_t
131 Timeout() const
133 return mTimeout;
136 void
137 SetTimeout(uint32_t aTimeout, ErrorResult& aRv);
139 bool
140 WithCredentials() const
142 return mWithCredentials;
145 void
146 SetWithCredentials(bool aWithCredentials, ErrorResult& aRv);
148 bool
149 MozBackgroundRequest() const
151 return mBackgroundRequest;
154 void
155 SetMozBackgroundRequest(bool aBackgroundRequest, ErrorResult& aRv);
157 XMLHttpRequestUpload*
158 GetUpload(ErrorResult& aRv);
160 void
161 Send(ErrorResult& aRv);
163 void
164 Send(const nsAString& aBody, ErrorResult& aRv);
166 void
167 Send(JSObject* aBody, ErrorResult& aRv);
169 void
170 Send(JSObject& aBody, ErrorResult& aRv)
172 Send(&aBody, aRv);
175 void
176 Send(const ArrayBuffer& aBody, ErrorResult& aRv) {
177 return Send(aBody.Obj(), aRv);
180 void
181 Send(const ArrayBufferView& aBody, ErrorResult& aRv) {
182 return Send(aBody.Obj(), aRv);
185 void
186 SendAsBinary(const nsAString& aBody, ErrorResult& aRv);
188 void
189 Abort(ErrorResult& aRv);
191 uint16_t
192 GetStatus(ErrorResult& aRv) const
194 aRv = mStateData.mStatusResult;
195 return mStateData.mStatus;
198 void
199 GetStatusText(nsACString& aStatusText) const
201 aStatusText = mStateData.mStatusText;
204 void
205 GetResponseHeader(const nsACString& aHeader, nsACString& aResponseHeader,
206 ErrorResult& aRv);
208 void
209 GetAllResponseHeaders(nsACString& aResponseHeaders, ErrorResult& aRv);
211 void
212 OverrideMimeType(const nsAString& aMimeType, ErrorResult& aRv);
214 XMLHttpRequestResponseType
215 ResponseType() const
217 return mResponseType;
220 void
221 SetResponseType(XMLHttpRequestResponseType aResponseType, ErrorResult& aRv);
223 jsval
224 GetResponse(JSContext* /* unused */, ErrorResult& aRv);
226 void
227 GetResponseText(nsAString& aResponseText, ErrorResult& aRv);
229 JSObject*
230 GetResponseXML() const
232 return nullptr;
235 JSObject*
236 GetChannel() const
238 return nullptr;
241 JS::Value
242 GetInterface(JSContext* cx, JS::Handle<JSObject*> aIID, ErrorResult& aRv)
244 aRv.Throw(NS_ERROR_FAILURE);
245 return JSVAL_NULL;
248 XMLHttpRequestUpload*
249 GetUploadObjectNoCreate() const
251 return mUpload;
254 void
255 UpdateState(const StateData& aStateData);
257 void
258 NullResponseText()
260 mStateData.mResponseText.SetIsVoid(true);
261 mStateData.mResponse = JSVAL_NULL;
264 bool MozAnon() const
266 return mMozAnon;
269 bool MozSystem() const
271 return mMozSystem;
274 private:
275 enum ReleaseType { Default, XHRIsGoingAway, WorkerIsGoingAway };
277 void
278 ReleaseProxy(ReleaseType aType = Default);
280 void
281 MaybePin(ErrorResult& aRv);
283 void
284 MaybeDispatchPrematureAbortEvents(ErrorResult& aRv);
286 void
287 DispatchPrematureAbortEvent(EventTarget* aTarget,
288 const nsAString& aEventType, bool aUploadTarget,
289 ErrorResult& aRv);
291 bool
292 SendInProgress() const
294 return mRooted;
297 void
298 SendInternal(const nsAString& aStringBody,
299 JSAutoStructuredCloneBuffer& aBody,
300 nsTArray<nsCOMPtr<nsISupports> >& aClonedObjects,
301 ErrorResult& aRv);
304 END_WORKERS_NAMESPACE
306 #endif // mozilla_dom_workers_xmlhttprequest_h__