|
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
|
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 |
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
5 |
|
6 #include "nsIDOMEventTarget.idl" |
|
7 |
|
8 interface nsIChannel; |
|
9 interface nsIDOMDocument; |
|
10 interface nsIDOMEventListener; |
|
11 interface nsIPrincipal; |
|
12 interface nsIScriptContext; |
|
13 interface nsIURI; |
|
14 interface nsIVariant; |
|
15 interface nsIGlobalObject; |
|
16 interface nsIInputStream; |
|
17 interface nsIDOMBlob; |
|
18 |
|
19 [scriptable, builtinclass, uuid(5ced7e7a-e2c3-4563-a57d-31b97ce64dc5)] |
|
20 interface nsIXMLHttpRequestEventTarget : nsIDOMEventTarget { |
|
21 // event handler attributes |
|
22 }; |
|
23 |
|
24 [scriptable, builtinclass, uuid(df3796fa-d98a-4185-9dda-d2f2b56a5d38)] |
|
25 interface nsIXMLHttpRequestUpload : nsIXMLHttpRequestEventTarget { |
|
26 // for future use |
|
27 }; |
|
28 |
|
29 /** |
|
30 * Mozilla's XMLHttpRequest is modelled after Microsoft's IXMLHttpRequest |
|
31 * object. The goal has been to make Mozilla's version match Microsoft's |
|
32 * version as closely as possible, but there are bound to be some differences. |
|
33 * |
|
34 * In general, Microsoft's documentation for IXMLHttpRequest can be used. |
|
35 * Mozilla's interface definitions provide some additional documentation. The |
|
36 * web page to look at is http://www.mozilla.org/xmlextras/ |
|
37 * |
|
38 * Mozilla's XMLHttpRequest object can be created in JavaScript like this: |
|
39 * new XMLHttpRequest() |
|
40 * compare to Internet Explorer: |
|
41 * new ActiveXObject("Msxml2.XMLHTTP") |
|
42 * |
|
43 * From JavaScript, the methods and properties visible in the XMLHttpRequest |
|
44 * object are a combination of nsIXMLHttpRequest and nsIJSXMLHttpRequest; |
|
45 * there is no need to differentiate between those interfaces. |
|
46 * |
|
47 * From native code, the way to set up onload and onerror handlers is a bit |
|
48 * different. Here is a comment from Johnny Stenback <jst@netscape.com>: |
|
49 * |
|
50 * The mozilla implementation of nsIXMLHttpRequest implements the interface |
|
51 * nsIDOMEventTarget and that's how you're supported to add event listeners. |
|
52 * Try something like this: |
|
53 * |
|
54 * nsCOMPtr<nsIDOMEventTarget> target(do_QueryInterface(myxmlhttpreq)); |
|
55 * |
|
56 * target->AddEventListener(NS_LITERAL_STRING("load"), mylistener, |
|
57 * PR_FALSE) |
|
58 * |
|
59 * where mylistener is your event listener object that implements the |
|
60 * interface nsIDOMEventListener. |
|
61 * |
|
62 * The 'onload', 'onerror', and 'onreadystatechange' attributes moved to |
|
63 * nsIJSXMLHttpRequest, but if you're coding in C++ you should avoid using |
|
64 * those. |
|
65 * |
|
66 * Conclusion: Do not use event listeners on XMLHttpRequest from C++, unless |
|
67 * you're aware of all the security implications. And then think twice about |
|
68 * it. |
|
69 */ |
|
70 [scriptable, uuid(2e91e088-e9fa-4ba4-9887-2a0b7cf27a3e)] |
|
71 interface nsIXMLHttpRequest : nsISupports |
|
72 { |
|
73 /** |
|
74 * The request uses a channel in order to perform the |
|
75 * request. This attribute represents the channel used |
|
76 * for the request. NULL if the channel has not yet been |
|
77 * created. |
|
78 * |
|
79 * Mozilla only. Requires elevated privileges to access. |
|
80 */ |
|
81 readonly attribute nsIChannel channel; |
|
82 |
|
83 /** |
|
84 * The response to the request is parsed as if it were a |
|
85 * text/xml stream. This attributes represents the response as |
|
86 * a DOM Document object. NULL if the request is unsuccessful or |
|
87 * has not yet been sent. |
|
88 */ |
|
89 readonly attribute nsIDOMDocument responseXML; |
|
90 |
|
91 /** |
|
92 * The response to the request as text. |
|
93 * NULL if the request is unsuccessful or |
|
94 * has not yet been sent. |
|
95 */ |
|
96 readonly attribute AString responseText; |
|
97 |
|
98 /** |
|
99 * Determine a response format which response attribute returns. |
|
100 * empty string (initial value) or "text": as text. |
|
101 * "arraybuffer": as a typed array ArrayBuffer. |
|
102 * "blob": as a File API Blob. |
|
103 * "document": as a DOM Document object. |
|
104 */ |
|
105 attribute AString responseType; |
|
106 |
|
107 /** |
|
108 * The response to the request as a specified format by responseType. |
|
109 * NULL if the request is unsuccessful or |
|
110 * has not yet been sent. |
|
111 */ |
|
112 [implicit_jscontext] readonly attribute jsval /* any */ response; |
|
113 |
|
114 /** |
|
115 * The status of the response to the request for HTTP requests. |
|
116 */ |
|
117 // XXX spec says unsigned short |
|
118 readonly attribute unsigned long status; |
|
119 |
|
120 /** |
|
121 * The string representing the status of the response for |
|
122 * HTTP requests. |
|
123 */ |
|
124 readonly attribute ACString statusText; |
|
125 |
|
126 /** |
|
127 * If the request has been sent already, this method will |
|
128 * abort the request. |
|
129 */ |
|
130 [binaryname(SlowAbort)] void abort(); |
|
131 |
|
132 /** |
|
133 * Returns all of the response headers as a string for HTTP |
|
134 * requests. |
|
135 * |
|
136 * @returns A string containing all of the response headers. |
|
137 * The empty string if the response has not yet been received. |
|
138 */ |
|
139 ACString getAllResponseHeaders(); |
|
140 |
|
141 /** |
|
142 * Returns the text of the header with the specified name for |
|
143 * HTTP requests. |
|
144 * |
|
145 * @param header The name of the header to retrieve |
|
146 * @returns A string containing the text of the header specified. |
|
147 * NULL if the response has not yet been received or the |
|
148 * header does not exist in the response. |
|
149 */ |
|
150 ACString getResponseHeader(in ACString header); |
|
151 |
|
152 %{C++ |
|
153 // note this is NOT virtual so this won't muck with the vtable! |
|
154 inline nsresult Open(const nsACString& method, const nsACString& url, |
|
155 bool async, const nsAString& user, |
|
156 const nsAString& password) { |
|
157 return Open(method, url, async, user, password, 3); |
|
158 } |
|
159 %} |
|
160 /** |
|
161 * Meant to be a script-only method for initializing a request. |
|
162 * |
|
163 * If there is an "active" request (that is, if open() has been called |
|
164 * already), this is equivalent to calling abort() and then open(). |
|
165 * |
|
166 * @param method The HTTP method - either "POST" or "GET". Ignored |
|
167 * if the URL is not a HTTP URL. |
|
168 * @param url The URL to which to send the request. |
|
169 * @param async (optional) Whether the request is synchronous or |
|
170 * asynchronous i.e. whether send returns only after |
|
171 * the response is received or if it returns immediately after |
|
172 * sending the request. In the latter case, notification |
|
173 * of completion is sent through the event listeners. |
|
174 * The default value is true. |
|
175 * @param user (optional) A username for authentication if necessary. |
|
176 * The default value is the empty string |
|
177 * @param password (optional) A password for authentication if necessary. |
|
178 * The default value is the empty string |
|
179 */ |
|
180 [optional_argc] void open(in ACString method, in AUTF8String url, |
|
181 [optional] in boolean async, |
|
182 [optional,Undefined(Empty)] in DOMString user, |
|
183 [optional,Undefined(Empty)] in DOMString password); |
|
184 |
|
185 /** |
|
186 * Sends the request. If the request is asynchronous, returns |
|
187 * immediately after sending the request. If it is synchronous |
|
188 * returns only after the response has been received. |
|
189 * |
|
190 * All event listeners must be set before calling send(). |
|
191 * |
|
192 * After the initial response, all event listeners will be cleared. |
|
193 * // XXXbz what does that mean, exactly? |
|
194 * |
|
195 * @param body Either an instance of nsIDOMDocument, nsIInputStream |
|
196 * or a string (nsISupportsString in the native calling |
|
197 * case). This is used to populate the body of the |
|
198 * HTTP request if the HTTP request method is "POST". |
|
199 * If the parameter is a nsIDOMDocument, it is serialized. |
|
200 * If the parameter is a nsIInputStream, then it must be |
|
201 * compatible with nsIUploadChannel.setUploadStream, and a |
|
202 * Content-Length header will be added to the HTTP request |
|
203 * with a value given by nsIInputStream.available. Any |
|
204 * headers included at the top of the stream will be |
|
205 * treated as part of the message body. The MIME type of |
|
206 * the stream should be specified by setting the Content- |
|
207 * Type header via the setRequestHeader method before |
|
208 * calling send. |
|
209 */ |
|
210 void send([optional] in nsIVariant body); |
|
211 |
|
212 /** |
|
213 * A variant of the send() method used to send binary data. |
|
214 * |
|
215 * @param body The request body as a DOM string. The string data will be |
|
216 * converted to a single-byte string by truncation (i.e., the |
|
217 * high-order byte of each character will be discarded). |
|
218 */ |
|
219 void sendAsBinary(in DOMString body); |
|
220 |
|
221 /** |
|
222 * Sets a HTTP request header for HTTP requests. You must call open |
|
223 * before setting the request headers. |
|
224 * |
|
225 * @param header The name of the header to set in the request. |
|
226 * @param value The body of the header. |
|
227 */ |
|
228 void setRequestHeader(in ACString header, in ACString value); |
|
229 |
|
230 /** |
|
231 * The amount of milliseconds a request can take before being terminated. |
|
232 * Initially zero. Zero means there is no timeout. |
|
233 */ |
|
234 attribute unsigned long timeout; |
|
235 |
|
236 /** |
|
237 * The state of the request. |
|
238 * |
|
239 * Possible values: |
|
240 * 0 UNSENT open() has not been called yet. |
|
241 * 1 OPENED send() has not been called yet. |
|
242 * 2 HEADERS_RECEIVED |
|
243 * send() has been called, headers and status are available. |
|
244 * 3 LOADING Downloading, responseText holds the partial data. |
|
245 * 4 DONE Finished with all operations. |
|
246 */ |
|
247 const unsigned short UNSENT = 0; |
|
248 const unsigned short OPENED = 1; |
|
249 const unsigned short HEADERS_RECEIVED = 2; |
|
250 const unsigned short LOADING = 3; |
|
251 const unsigned short DONE = 4; |
|
252 readonly attribute unsigned short readyState; |
|
253 |
|
254 /** |
|
255 * Override the mime type returned by the server (if any). This may |
|
256 * be used, for example, to force a stream to be treated and parsed |
|
257 * as text/xml, even if the server does not report it as such. This |
|
258 * must be done before the <code>send</code> method is invoked. |
|
259 * |
|
260 * @param mimetype The type used to override that returned by the server |
|
261 * (if any). |
|
262 */ |
|
263 [binaryname(SlowOverrideMimeType)] void overrideMimeType(in DOMString mimetype); |
|
264 |
|
265 /** |
|
266 * Set to true if this is a background service request. This will |
|
267 * prevent a load group being associated with the request, and |
|
268 * suppress any security dialogs from being shown * to the user. |
|
269 * In the cases where one of those dialogs would be shown, the request |
|
270 * will simply fail instead. |
|
271 */ |
|
272 attribute boolean mozBackgroundRequest; |
|
273 |
|
274 /** |
|
275 * When set to true attempts to make cross-site Access-Control requests |
|
276 * with credentials such as cookies and authorization headers. |
|
277 * |
|
278 * Never affects same-site requests. |
|
279 * |
|
280 * Defaults to false. |
|
281 */ |
|
282 attribute boolean withCredentials; |
|
283 |
|
284 /** |
|
285 * Initialize the object for use from C++ code with the principal, script |
|
286 * context, and owner window that should be used. |
|
287 * |
|
288 * @param principal The principal to use for the request. This must not be |
|
289 * null. |
|
290 * @param scriptContext The script context to use for the request. May be |
|
291 * null. |
|
292 * @param globalObject The associated global for the request. Can be the |
|
293 * outer window, a sandbox, or a backstage pass. |
|
294 * May be null, but then the request cannot create a |
|
295 * document. |
|
296 * @param baseURI The base URI to use when resolving relative URIs. May be |
|
297 * null. |
|
298 */ |
|
299 [noscript] void init(in nsIPrincipal principal, |
|
300 in nsIScriptContext scriptContext, |
|
301 in nsIGlobalObject globalObject, |
|
302 in nsIURI baseURI); |
|
303 |
|
304 /** |
|
305 * Upload process can be tracked by adding event listener to |upload|. |
|
306 */ |
|
307 readonly attribute nsIXMLHttpRequestUpload upload; |
|
308 |
|
309 /** |
|
310 * Meant to be a script-only mechanism for setting a callback function. |
|
311 * The attribute is expected to be JavaScript function object. When the |
|
312 * readyState changes, the callback function will be called. |
|
313 * This attribute should not be used from native code!! |
|
314 * |
|
315 * After the initial response, all event listeners will be cleared. |
|
316 * // XXXbz what does that mean, exactly? |
|
317 * |
|
318 * Call open() before setting an onreadystatechange listener. |
|
319 */ |
|
320 [implicit_jscontext] attribute jsval onreadystatechange; |
|
321 |
|
322 /** |
|
323 * If true, the request will be sent without cookie and authentication |
|
324 * headers. |
|
325 */ |
|
326 readonly attribute boolean mozAnon; |
|
327 |
|
328 /** |
|
329 * If true, the same origin policy will not be enforced on the request. |
|
330 */ |
|
331 readonly attribute boolean mozSystem; |
|
332 }; |
|
333 |
|
334 [uuid(840d0d00-e83e-4a29-b3c7-67e96e90a499)] |
|
335 interface nsIXHRSendable : nsISupports { |
|
336 void getSendInfo(out nsIInputStream body, |
|
337 out uint64_t contentLength, |
|
338 out ACString contentType, |
|
339 out ACString charset); |
|
340 }; |
|
341 |
|
342 /** |
|
343 * @deprecated |
|
344 */ |
|
345 [scriptable, uuid(8ae70a39-edf1-40b4-a992-472d23421c25)] |
|
346 interface nsIJSXMLHttpRequest : nsISupports { |
|
347 }; |
|
348 |
|
349 %{ C++ |
|
350 #define NS_XMLHTTPREQUEST_CID \ |
|
351 { /* d164e770-4157-11d4-9a42-000064657374 */ \ |
|
352 0xd164e770, 0x4157, 0x11d4, \ |
|
353 {0x9a, 0x42, 0x00, 0x00, 0x64, 0x65, 0x73, 0x74} } |
|
354 #define NS_XMLHTTPREQUEST_CONTRACTID \ |
|
355 "@mozilla.org/xmlextras/xmlhttprequest;1" |
|
356 %} |