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_XMLHttpRequest_h
8 #define mozilla_dom_XMLHttpRequest_h
9 
10 #include "mozilla/Attributes.h"
11 #include "mozilla/dom/XMLHttpRequestEventTarget.h"
12 #include "mozilla/dom/XMLHttpRequestBinding.h"
13 
14 class nsIJSID;
15 
16 namespace mozilla {
17 namespace dom {
18 
19 class Blob;
20 class DOMString;
21 class FormData;
22 class URLSearchParams;
23 class XMLHttpRequestUpload;
24 
25 class XMLHttpRequest : public XMLHttpRequestEventTarget {
26  public:
27   static already_AddRefed<XMLHttpRequest> Constructor(
28       const GlobalObject& aGlobal, const MozXMLHttpRequestParameters& aParams,
29       ErrorResult& aRv);
30 
Constructor(const GlobalObject & aGlobal,const nsAString & ignored,ErrorResult & aRv)31   static already_AddRefed<XMLHttpRequest> Constructor(
32       const GlobalObject& aGlobal, const nsAString& ignored, ErrorResult& aRv) {
33     // Pretend like someone passed null, so we can pick up the default values
34     MozXMLHttpRequestParameters params;
35     if (!params.Init(aGlobal.Context(), JS::NullHandleValue)) {
36       aRv.Throw(NS_ERROR_UNEXPECTED);
37       return nullptr;
38     }
39 
40     return Constructor(aGlobal, params, aRv);
41   }
42 
43   IMPL_EVENT_HANDLER(readystatechange)
44 
45   virtual uint16_t ReadyState() const = 0;
46 
47   virtual void Open(const nsACString& aMethod, const nsAString& aUrl,
48                     ErrorResult& aRv) = 0;
49 
50   virtual void Open(const nsACString& aMethod, const nsAString& aUrl,
51                     bool aAsync, const nsAString& aUser,
52                     const nsAString& aPassword, ErrorResult& aRv) = 0;
53 
54   virtual void SetRequestHeader(const nsACString& aHeader,
55                                 const nsACString& aValue, ErrorResult& aRv) = 0;
56 
57   virtual uint32_t Timeout() const = 0;
58 
59   virtual void SetTimeout(uint32_t aTimeout, ErrorResult& aRv) = 0;
60 
61   virtual bool WithCredentials() const = 0;
62 
63   virtual void SetWithCredentials(bool aWithCredentials, ErrorResult& aRv) = 0;
64 
65   virtual XMLHttpRequestUpload* GetUpload(ErrorResult& aRv) = 0;
66 
67   virtual void Send(
68       JSContext* aCx,
69       const Nullable<
70           DocumentOrBlobOrArrayBufferViewOrArrayBufferOrFormDataOrURLSearchParamsOrUSVString>&
71           aData,
72       ErrorResult& aRv) = 0;
73 
74   virtual void SendInputStream(nsIInputStream* aInputStream,
75                                ErrorResult& aRv) = 0;
76 
77   virtual void Abort(ErrorResult& aRv) = 0;
78 
79   virtual void GetResponseURL(nsAString& aUrl) = 0;
80 
81   virtual uint32_t GetStatus(ErrorResult& aRv) = 0;
82 
83   virtual void GetStatusText(nsACString& aStatusText, ErrorResult& aRv) = 0;
84 
85   virtual void GetResponseHeader(const nsACString& aHeader, nsACString& aResult,
86                                  ErrorResult& aRv) = 0;
87 
88   virtual void GetAllResponseHeaders(nsACString& aResponseHeaders,
89                                      ErrorResult& aRv) = 0;
90 
91   virtual void OverrideMimeType(const nsAString& aMimeType,
92                                 ErrorResult& aRv) = 0;
93 
94   virtual XMLHttpRequestResponseType ResponseType() const = 0;
95 
96   virtual void SetResponseType(XMLHttpRequestResponseType aType,
97                                ErrorResult& aRv) = 0;
98 
99   virtual void GetResponse(JSContext* aCx,
100                            JS::MutableHandle<JS::Value> aResponse,
101                            ErrorResult& aRv) = 0;
102 
103   virtual void GetResponseText(DOMString& aResponseText, ErrorResult& aRv) = 0;
104 
105   virtual nsIDocument* GetResponseXML(ErrorResult& aRv) = 0;
106 
107   virtual bool MozBackgroundRequest() const = 0;
108 
109   virtual void SetMozBackgroundRequest(bool aMozBackgroundRequest,
110                                        ErrorResult& aRv) = 0;
111 
112   virtual nsIChannel* GetChannel() const = 0;
113 
114   virtual void GetNetworkInterfaceId(nsACString& aId) const = 0;
115 
116   virtual void SetNetworkInterfaceId(const nsACString& aId) = 0;
117 
118   // We need a GetInterface callable from JS for chrome JS
119   virtual void GetInterface(JSContext* aCx, nsIJSID* aIID,
120                             JS::MutableHandle<JS::Value> aRetval,
121                             ErrorResult& aRv) = 0;
122 
123   virtual void SetOriginAttributes(
124       const mozilla::dom::OriginAttributesDictionary& aAttrs) = 0;
125 
126   virtual uint16_t ErrorCode() const = 0;
127 
128   virtual bool MozAnon() const = 0;
129 
130   virtual bool MozSystem() const = 0;
131 
WrapObject(JSContext * aCx,JS::Handle<JSObject * > aGivenProto)132   virtual JSObject* WrapObject(JSContext* aCx,
133                                JS::Handle<JSObject*> aGivenProto) override {
134     return mozilla::dom::XMLHttpRequestBinding::Wrap(aCx, this, aGivenProto);
135   }
136 };
137 
138 }  // namespace dom
139 }  // namespace mozilla
140 
141 #endif  // mozilla_dom_XMLHttpRequest_h
142