Bug 1708422: part 14) Extend documentation of `mozInlineSpellChecker::SpellCheckerTim...
[gecko.git] / dom / xhr / XMLHttpRequestWorker.h
blobc1aa6cc16b81267eca980b3391574b98ef757292
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef mozilla_dom_XMLHttpRequestWorker_h
8 #define mozilla_dom_XMLHttpRequestWorker_h
10 #include "XMLHttpRequest.h"
11 #include "XMLHttpRequestString.h"
12 #include "mozilla/dom/BodyExtractor.h"
13 #include "mozilla/dom/TypedArray.h"
15 // XXX Avoid including this here by moving function bodies to the cpp file
16 #include "mozilla/dom/BlobImpl.h"
18 namespace mozilla {
19 namespace dom {
21 class Proxy;
22 class DOMString;
23 class SendRunnable;
24 class StrongWorkerRef;
25 class WorkerPrivate;
27 class XMLHttpRequestWorker final : public XMLHttpRequest {
28 public:
29 // This defines the xhr.response value.
30 struct ResponseData {
31 nsresult mResponseResult;
33 // responseType is empty or text.
34 XMLHttpRequestStringSnapshot mResponseText;
36 // responseType is blob
37 RefPtr<BlobImpl> mResponseBlobImpl;
39 // responseType is arrayBuffer;
40 RefPtr<ArrayBufferBuilder> mResponseArrayBufferBuilder;
42 // responseType is json
43 nsString mResponseJSON;
45 ResponseData() : mResponseResult(NS_OK) {}
48 struct StateData {
49 nsString mResponseURL;
50 uint32_t mStatus;
51 nsCString mStatusText;
52 uint16_t mReadyState;
53 bool mFlagSend;
54 nsresult mStatusResult;
56 StateData()
57 : mStatus(0), mReadyState(0), mFlagSend(false), mStatusResult(NS_OK) {}
60 private:
61 RefPtr<XMLHttpRequestUpload> mUpload;
62 WorkerPrivate* mWorkerPrivate;
63 RefPtr<StrongWorkerRef> mWorkerRef;
64 RefPtr<Proxy> mProxy;
66 XMLHttpRequestResponseType mResponseType;
68 UniquePtr<StateData> mStateData;
70 UniquePtr<ResponseData> mResponseData;
71 RefPtr<Blob> mResponseBlob;
72 JS::Heap<JSObject*> mResponseArrayBufferValue;
73 JS::Heap<JS::Value> mResponseJSONValue;
75 uint32_t mTimeout;
77 bool mBackgroundRequest;
78 bool mWithCredentials;
79 bool mCanceled;
81 bool mMozAnon;
82 bool mMozSystem;
84 nsString mMimeTypeOverride;
86 public:
87 NS_DECL_ISUPPORTS_INHERITED
88 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(XMLHttpRequestWorker,
89 XMLHttpRequest)
91 static already_AddRefed<XMLHttpRequest> Construct(
92 const GlobalObject& aGlobal, const MozXMLHttpRequestParameters& aParams,
93 ErrorResult& aRv);
95 void Unpin();
97 virtual uint16_t ReadyState() const override {
98 return mStateData->mReadyState;
101 virtual void Open(const nsACString& aMethod, const nsAString& aUrl,
102 ErrorResult& aRv) override {
103 Open(aMethod, aUrl, true, Optional<nsAString>(), Optional<nsAString>(),
104 aRv);
107 virtual void Open(const nsACString& aMethod, const nsAString& aUrl,
108 bool aAsync, const nsAString& aUsername,
109 const nsAString& aPassword, ErrorResult& aRv) override {
110 Optional<nsAString> username;
111 username = &aUsername;
112 Optional<nsAString> password;
113 password = &aPassword;
114 Open(aMethod, aUrl, aAsync, username, password, aRv);
117 void Open(const nsACString& aMethod, const nsAString& aUrl, bool aAsync,
118 const Optional<nsAString>& aUser,
119 const Optional<nsAString>& aPassword, ErrorResult& aRv);
121 virtual void SetRequestHeader(const nsACString& aHeader,
122 const nsACString& aValue,
123 ErrorResult& aRv) override;
125 virtual uint32_t Timeout() const override { return mTimeout; }
127 virtual void SetTimeout(uint32_t aTimeout, ErrorResult& aRv) override;
129 virtual bool WithCredentials() const override { return mWithCredentials; }
131 virtual void SetWithCredentials(bool aWithCredentials,
132 ErrorResult& aRv) override;
134 virtual bool MozBackgroundRequest() const override {
135 return mBackgroundRequest;
138 virtual void SetMozBackgroundRequest(bool aBackgroundRequest,
139 ErrorResult& aRv) override;
141 virtual nsIChannel* GetChannel() const override {
142 MOZ_CRASH("This method cannot be called on workers.");
145 virtual XMLHttpRequestUpload* GetUpload(ErrorResult& aRv) override;
147 virtual void Send(
148 const Nullable<
149 DocumentOrBlobOrArrayBufferViewOrArrayBufferOrFormDataOrURLSearchParamsOrUSVString>&
150 aData,
151 ErrorResult& aRv) override;
153 virtual void SendInputStream(nsIInputStream* aInputStream,
154 ErrorResult& aRv) override {
155 MOZ_CRASH("nsIInputStream is not a valid argument for XHR in workers.");
158 virtual void Abort(ErrorResult& aRv) override;
160 virtual void GetResponseURL(nsAString& aUrl) override {
161 aUrl = mStateData->mResponseURL;
164 uint32_t GetStatus(ErrorResult& aRv) override {
165 aRv = mStateData->mStatusResult;
166 return mStateData->mStatus;
169 virtual void GetStatusText(nsACString& aStatusText,
170 ErrorResult& aRv) override {
171 aStatusText = mStateData->mStatusText;
174 virtual void GetResponseHeader(const nsACString& aHeader,
175 nsACString& aResponseHeader,
176 ErrorResult& aRv) override;
178 virtual void GetAllResponseHeaders(nsACString& aResponseHeaders,
179 ErrorResult& aRv) override;
181 virtual void OverrideMimeType(const nsAString& aMimeType,
182 ErrorResult& aRv) override;
184 virtual XMLHttpRequestResponseType ResponseType() const override {
185 return mResponseType;
188 virtual void SetResponseType(XMLHttpRequestResponseType aResponseType,
189 ErrorResult& aRv) override;
191 virtual void GetResponse(JSContext* /* unused */,
192 JS::MutableHandle<JS::Value> aResponse,
193 ErrorResult& aRv) override;
195 virtual void GetResponseText(DOMString& aResponseText,
196 ErrorResult& aRv) override;
198 virtual Document* GetResponseXML(ErrorResult& aRv) override {
199 MOZ_CRASH("This method should not be called.");
202 virtual void GetInterface(JSContext* aCx, JS::Handle<JS::Value> aIID,
203 JS::MutableHandle<JS::Value> aRetval,
204 ErrorResult& aRv) override {
205 aRv.Throw(NS_ERROR_FAILURE);
208 virtual void SetOriginAttributes(
209 const mozilla::dom::OriginAttributesDictionary& aAttrs) override {
210 MOZ_CRASH("This method cannot be called on workers.");
213 XMLHttpRequestUpload* GetUploadObjectNoCreate() const { return mUpload; }
215 void UpdateState(UniquePtr<StateData>&& aStateData,
216 UniquePtr<ResponseData>&& aResponseData);
218 virtual uint16_t ErrorCode() const override {
219 return 0; // eOK
222 virtual bool MozAnon() const override { return mMozAnon; }
224 virtual bool MozSystem() const override { return mMozSystem; }
226 bool SendInProgress() const { return !!mWorkerRef; }
228 private:
229 XMLHttpRequestWorker(WorkerPrivate* aWorkerPrivate,
230 nsIGlobalObject* aGlobalObject);
231 ~XMLHttpRequestWorker();
233 enum ReleaseType { Default, XHRIsGoingAway, WorkerIsGoingAway };
235 void ReleaseProxy(ReleaseType aType = Default);
237 void MaybePin(ErrorResult& aRv);
239 void MaybeDispatchPrematureAbortEvents(ErrorResult& aRv);
241 void DispatchPrematureAbortEvent(EventTarget* aTarget,
242 const nsAString& aEventType,
243 bool aUploadTarget, ErrorResult& aRv);
245 void Send(JSContext* aCx, JS::Handle<JSObject*> aBody, ErrorResult& aRv);
247 void SendInternal(const BodyExtractorBase* aBody, ErrorResult& aRv);
249 void ResetResponseData();
252 } // namespace dom
253 } // namespace mozilla
255 #endif // mozilla_dom_workers_xmlhttprequest_h__