Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/xhr/XMLHttpRequestWorker.h
Line
Count
Source (jump to first uncovered line)
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/. */
6
7
#ifndef mozilla_dom_XMLHttpRequestWorker_h
8
#define mozilla_dom_XMLHttpRequestWorker_h
9
10
#include "XMLHttpRequest.h"
11
#include "XMLHttpRequestString.h"
12
#include "mozilla/dom/TypedArray.h"
13
14
namespace mozilla {
15
namespace dom {
16
17
class Proxy;
18
class DOMString;
19
class SendRunnable;
20
class StrongWorkerRef;
21
class WorkerPrivate;
22
23
class XMLHttpRequestWorker final : public XMLHttpRequest
24
{
25
public:
26
  struct StateData
27
  {
28
    XMLHttpRequestStringSnapshot mResponseText;
29
    nsString mResponseURL;
30
    uint32_t mStatus;
31
    nsCString mStatusText;
32
    uint16_t mReadyState;
33
    bool mFlagSend;
34
    JS::Heap<JS::Value> mResponse;
35
    nsresult mResponseTextResult;
36
    nsresult mStatusResult;
37
    nsresult mResponseResult;
38
39
    StateData()
40
    : mStatus(0), mReadyState(0), mFlagSend(false),
41
      mResponse(JS::UndefinedValue()), mResponseTextResult(NS_OK),
42
      mStatusResult(NS_OK), mResponseResult(NS_OK)
43
0
    { }
44
45
    void trace(JSTracer* trc);
46
  };
47
48
private:
49
  RefPtr<XMLHttpRequestUpload> mUpload;
50
  WorkerPrivate* mWorkerPrivate;
51
  RefPtr<StrongWorkerRef> mWorkerRef;
52
  RefPtr<Proxy> mProxy;
53
  XMLHttpRequestResponseType mResponseType;
54
  StateData mStateData;
55
56
  uint32_t mTimeout;
57
58
  bool mBackgroundRequest;
59
  bool mWithCredentials;
60
  bool mCanceled;
61
62
  bool mMozAnon;
63
  bool mMozSystem;
64
65
public:
66
  NS_DECL_ISUPPORTS_INHERITED
67
  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(XMLHttpRequestWorker,
68
                                                         XMLHttpRequest)
69
70
71
  static already_AddRefed<XMLHttpRequest>
72
  Construct(const GlobalObject& aGlobal,
73
            const MozXMLHttpRequestParameters& aParams,
74
            ErrorResult& aRv);
75
76
  void
77
  Unpin();
78
79
  virtual uint16_t
80
  ReadyState() const override
81
0
  {
82
0
    return mStateData.mReadyState;
83
0
  }
84
85
  virtual void
86
  Open(const nsACString& aMethod, const nsAString& aUrl,
87
       ErrorResult& aRv) override
88
0
  {
89
0
    Open(aMethod, aUrl, true, Optional<nsAString>(),
90
0
         Optional<nsAString>(), aRv);
91
0
  }
92
93
  virtual void
94
  Open(const nsACString& aMethod, const nsAString& aUrl, bool aAsync,
95
       const nsAString& aUsername, const nsAString& aPassword,
96
       ErrorResult& aRv) override
97
0
  {
98
0
    Optional<nsAString> username;
99
0
    username = &aUsername;
100
0
    Optional<nsAString> password;
101
0
    password = &aPassword;
102
0
    Open(aMethod, aUrl, aAsync, username, password, aRv);
103
0
  }
104
105
  void
106
  Open(const nsACString& aMethod, const nsAString& aUrl,
107
       bool aAsync, const Optional<nsAString>& aUser,
108
       const Optional<nsAString>& aPassword, ErrorResult& aRv);
109
110
  virtual void
111
  SetRequestHeader(const nsACString& aHeader, const nsACString& aValue,
112
                   ErrorResult& aRv) override;
113
114
  virtual uint32_t
115
  Timeout() const override
116
0
  {
117
0
    return mTimeout;
118
0
  }
119
120
  virtual void
121
  SetTimeout(uint32_t aTimeout, ErrorResult& aRv) override;
122
123
  virtual bool
124
  WithCredentials() const override
125
0
  {
126
0
    return mWithCredentials;
127
0
  }
128
129
  virtual void
130
  SetWithCredentials(bool aWithCredentials, ErrorResult& aRv) override;
131
132
  virtual bool
133
  MozBackgroundRequest() const override
134
0
  {
135
0
    return mBackgroundRequest;
136
0
  }
137
138
  virtual void
139
  SetMozBackgroundRequest(bool aBackgroundRequest, ErrorResult& aRv) override;
140
141
  virtual nsIChannel*
142
  GetChannel() const override
143
0
  {
144
0
    MOZ_CRASH("This method cannot be called on workers.");
145
0
  }
146
147
  virtual XMLHttpRequestUpload*
148
  GetUpload(ErrorResult& aRv) override;
149
150
  virtual void
151
  Send(JSContext* aCx,
152
       const Nullable<DocumentOrBlobOrArrayBufferViewOrArrayBufferOrFormDataOrURLSearchParamsOrUSVString>& aData,
153
       ErrorResult& aRv) override;
154
155
  virtual void
156
  SendInputStream(nsIInputStream* aInputStream, ErrorResult& aRv) override
157
0
  {
158
0
    MOZ_CRASH("nsIInputStream is not a valid argument for XHR in workers.");
159
0
  }
160
161
  virtual void
162
  Abort(ErrorResult& aRv) override;
163
164
  virtual void
165
  GetResponseURL(nsAString& aUrl) override
166
0
  {
167
0
    aUrl = mStateData.mResponseURL;
168
0
  }
169
170
  uint32_t
171
  GetStatus(ErrorResult& aRv) override
172
0
  {
173
0
    aRv = mStateData.mStatusResult;
174
0
    return mStateData.mStatus;
175
0
  }
176
177
  virtual void
178
  GetStatusText(nsACString& aStatusText, ErrorResult& aRv) override
179
0
  {
180
0
    aStatusText = mStateData.mStatusText;
181
0
  }
182
183
  virtual void
184
  GetResponseHeader(const nsACString& aHeader, nsACString& aResponseHeader,
185
                    ErrorResult& aRv) override;
186
187
  virtual void
188
  GetAllResponseHeaders(nsACString& aResponseHeaders,
189
                        ErrorResult& aRv) override;
190
191
  virtual void
192
  OverrideMimeType(const nsAString& aMimeType, ErrorResult& aRv) override;
193
194
  virtual XMLHttpRequestResponseType
195
  ResponseType() const override
196
0
  {
197
0
    return mResponseType;
198
0
  }
199
200
  virtual void
201
  SetResponseType(XMLHttpRequestResponseType aResponseType,
202
                  ErrorResult& aRv) override;
203
204
  virtual void
205
  GetResponse(JSContext* /* unused */, JS::MutableHandle<JS::Value> aResponse,
206
              ErrorResult& aRv) override;
207
208
  virtual void
209
  GetResponseText(DOMString& aResponseText, ErrorResult& aRv) override;
210
211
  virtual nsIDocument*
212
  GetResponseXML(ErrorResult& aRv) override
213
0
  {
214
0
    MOZ_CRASH("This method should not be called.");
215
0
  }
216
217
  virtual void
218
  GetInterface(JSContext* aCx, nsIJSID* aIID,
219
               JS::MutableHandle<JS::Value> aRetval,
220
               ErrorResult& aRv) override
221
0
  {
222
0
    aRv.Throw(NS_ERROR_FAILURE);
223
0
  }
224
225
  virtual void
226
  SetOriginAttributes(const mozilla::dom::OriginAttributesDictionary& aAttrs) override
227
0
  {
228
0
    MOZ_CRASH("This method cannot be called on workers.");
229
0
  }
230
231
  XMLHttpRequestUpload*
232
  GetUploadObjectNoCreate() const
233
0
  {
234
0
    return mUpload;
235
0
  }
236
237
  void
238
  UpdateState(const StateData& aStateData, bool aUseCachedArrayBufferResponse);
239
240
  void
241
  NullResponseText()
242
0
  {
243
0
    mStateData.mResponseText.SetVoid();
244
0
    mStateData.mResponse.setNull();
245
0
  }
246
247
  virtual uint16_t ErrorCode() const override
248
0
  {
249
0
    return 0; // eOK
250
0
  }
251
252
  virtual bool MozAnon() const override
253
0
  {
254
0
    return mMozAnon;
255
0
  }
256
257
  virtual bool MozSystem() const override
258
0
  {
259
0
    return mMozSystem;
260
0
  }
261
262
  bool
263
  SendInProgress() const
264
0
  {
265
0
    return !!mWorkerRef;
266
0
  }
267
268
private:
269
  explicit XMLHttpRequestWorker(WorkerPrivate* aWorkerPrivate);
270
  ~XMLHttpRequestWorker();
271
272
  enum ReleaseType { Default, XHRIsGoingAway, WorkerIsGoingAway };
273
274
  void
275
  ReleaseProxy(ReleaseType aType = Default);
276
277
  void
278
  MaybePin(ErrorResult& aRv);
279
280
  void
281
  MaybeDispatchPrematureAbortEvents(ErrorResult& aRv);
282
283
  void
284
  DispatchPrematureAbortEvent(EventTarget* aTarget,
285
                              const nsAString& aEventType, bool aUploadTarget,
286
                              ErrorResult& aRv);
287
288
  void
289
  Send(JSContext* aCx, JS::Handle<JSObject*> aBody, ErrorResult& aRv);
290
291
  void
292
  SendInternal(SendRunnable* aRunnable,
293
               ErrorResult& aRv);
294
};
295
296
} // dom namespace
297
} // mozilla namespace
298
299
#endif // mozilla_dom_workers_xmlhttprequest_h__