summaryrefslogtreecommitdiffstats
path: root/dom/xhr/nsIXMLHttpRequest.idl
diff options
context:
space:
mode:
Diffstat (limited to 'dom/xhr/nsIXMLHttpRequest.idl')
-rw-r--r--dom/xhr/nsIXMLHttpRequest.idl349
1 files changed, 349 insertions, 0 deletions
diff --git a/dom/xhr/nsIXMLHttpRequest.idl b/dom/xhr/nsIXMLHttpRequest.idl
new file mode 100644
index 000000000..53e80bab7
--- /dev/null
+++ b/dom/xhr/nsIXMLHttpRequest.idl
@@ -0,0 +1,349 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsIDOMEventTarget.idl"
+
+interface nsIChannel;
+interface nsIDOMDocument;
+interface nsIDOMEventListener;
+interface nsILoadGroup;
+interface nsIPrincipal;
+interface nsIScriptContext;
+interface nsIURI;
+interface nsIVariant;
+interface nsIGlobalObject;
+interface nsIInputStream;
+interface nsIDOMBlob;
+
+[builtinclass, uuid(88e7d2a0-2e5b-4f65-9624-a61e607a9948)]
+interface nsIXMLHttpRequestEventTarget : nsIDOMEventTarget {
+ // event handler attributes
+};
+
+[builtinclass, uuid(d74c4dc4-bc8c-4f5d-b7f1-121a48750abe)]
+interface nsIXMLHttpRequestUpload : nsIXMLHttpRequestEventTarget {
+ // for future use
+};
+
+/**
+ * Mozilla's XMLHttpRequest is modelled after Microsoft's IXMLHttpRequest
+ * object. The goal has been to make Mozilla's version match Microsoft's
+ * version as closely as possible, but there are bound to be some differences.
+ *
+ * In general, Microsoft's documentation for IXMLHttpRequest can be used.
+ * Mozilla's interface definitions provide some additional documentation. The
+ * web page to look at is http://www.mozilla.org/xmlextras/
+ *
+ * Mozilla's XMLHttpRequest object can be created in JavaScript like this:
+ * new XMLHttpRequest()
+ * compare to Internet Explorer:
+ * new ActiveXObject("Msxml2.XMLHTTP")
+ *
+ * From JavaScript, the methods and properties visible in the XMLHttpRequest
+ * object are a combination of nsIXMLHttpRequest and nsIJSXMLHttpRequest;
+ * there is no need to differentiate between those interfaces.
+ *
+ * From native code, the way to set up onload and onerror handlers is a bit
+ * different. Here is a comment from Johnny Stenback <jst@netscape.com>:
+ *
+ * The mozilla implementation of nsIXMLHttpRequest implements the interface
+ * nsIDOMEventTarget and that's how you're supported to add event listeners.
+ * Try something like this:
+ *
+ * nsCOMPtr<nsIDOMEventTarget> target(do_QueryInterface(myxmlhttpreq));
+ *
+ * target->AddEventListener(NS_LITERAL_STRING("load"), mylistener,
+ * PR_FALSE)
+ *
+ * where mylistener is your event listener object that implements the
+ * interface nsIDOMEventListener.
+ *
+ * The 'onload', 'onerror', and 'onreadystatechange' attributes moved to
+ * nsIJSXMLHttpRequest, but if you're coding in C++ you should avoid using
+ * those.
+ *
+ * Conclusion: Do not use event listeners on XMLHttpRequest from C++, unless
+ * you're aware of all the security implications. And then think twice about
+ * it.
+ */
+[scriptable, uuid(6f54214c-7175-498d-9d2d-0429e38c2869)]
+interface nsIXMLHttpRequest : nsISupports
+{
+ /**
+ * The request uses a channel in order to perform the
+ * request. This attribute represents the channel used
+ * for the request. NULL if the channel has not yet been
+ * created.
+ *
+ * Mozilla only. Requires elevated privileges to access.
+ */
+ readonly attribute nsIChannel channel;
+
+ /**
+ * The response to the request is parsed as if it were a
+ * text/xml stream. This attributes represents the response as
+ * a DOM Document object. NULL if the request is unsuccessful or
+ * has not yet been sent.
+ */
+ readonly attribute nsIDOMDocument responseXML;
+
+ /**
+ * The response to the request as text.
+ * NULL if the request is unsuccessful or
+ * has not yet been sent.
+ */
+ readonly attribute AString responseText;
+
+ /**
+ * Determine a response format which response attribute returns.
+ * empty string (initial value) or "text": as text.
+ * "arraybuffer": as a typed array ArrayBuffer.
+ * "blob": as a File API Blob.
+ * "document": as a DOM Document object.
+ */
+ attribute AString responseType;
+
+ /**
+ * The response to the request as a specified format by responseType.
+ * NULL if the request is unsuccessful or
+ * has not yet been sent.
+ */
+ [implicit_jscontext] readonly attribute jsval /* any */ response;
+
+ /**
+ * The status of the response to the request for HTTP requests.
+ */
+ // XXX spec says unsigned short
+ readonly attribute unsigned long status;
+
+ /**
+ * The string representing the status of the response for
+ * HTTP requests.
+ */
+ readonly attribute ACString statusText;
+
+ /**
+ * If the request has been sent already, this method will
+ * abort the request.
+ */
+ [binaryname(SlowAbort)] void abort();
+
+ /**
+ * Returns all of the response headers as a string for HTTP
+ * requests.
+ *
+ * @returns A string containing all of the response headers.
+ * The empty string if the response has not yet been received.
+ */
+ ACString getAllResponseHeaders();
+
+ /**
+ * Returns the text of the header with the specified name for
+ * HTTP requests.
+ *
+ * @param header The name of the header to retrieve
+ * @returns A string containing the text of the header specified.
+ * NULL if the response has not yet been received or the
+ * header does not exist in the response.
+ */
+ ACString getResponseHeader(in ACString header);
+
+%{C++
+ // note this is NOT virtual so this won't muck with the vtable!
+ inline nsresult Open(const nsACString& method, const nsACString& url,
+ bool async, const nsAString& user,
+ const nsAString& password) {
+ return Open(method, url, async, user, password, 3);
+ }
+%}
+ /**
+ * Meant to be a script-only method for initializing a request.
+ *
+ * If there is an "active" request (that is, if open() has been called
+ * already), this is equivalent to calling abort() and then open().
+ *
+ * @param method The HTTP method - either "POST" or "GET". Ignored
+ * if the URL is not a HTTP URL.
+ * @param url The URL to which to send the request.
+ * @param async (optional) Whether the request is synchronous or
+ * asynchronous i.e. whether send returns only after
+ * the response is received or if it returns immediately after
+ * sending the request. In the latter case, notification
+ * of completion is sent through the event listeners.
+ * The default value is true.
+ * @param user (optional) A username for authentication if necessary.
+ * The default value is the empty string
+ * @param password (optional) A password for authentication if necessary.
+ * The default value is the empty string
+ */
+ [optional_argc] void open(in ACString method, in AUTF8String url,
+ [optional] in boolean async,
+ [optional,Undefined(Empty)] in DOMString user,
+ [optional,Undefined(Empty)] in DOMString password);
+
+ /**
+ * Sends the request. If the request is asynchronous, returns
+ * immediately after sending the request. If it is synchronous
+ * returns only after the response has been received.
+ *
+ * All event listeners must be set before calling send().
+ *
+ * After the initial response, all event listeners will be cleared.
+ * // XXXbz what does that mean, exactly?
+ *
+ * @param body Either an instance of nsIDOMDocument, nsIInputStream
+ * or a string (nsISupportsString in the native calling
+ * case). This is used to populate the body of the
+ * HTTP request if the HTTP request method is "POST".
+ * If the parameter is a nsIDOMDocument, it is serialized.
+ * If the parameter is a nsIInputStream, then it must be
+ * compatible with nsIUploadChannel.setUploadStream, and a
+ * Content-Length header will be added to the HTTP request
+ * with a value given by nsIInputStream.available. Any
+ * headers included at the top of the stream will be
+ * treated as part of the message body. The MIME type of
+ * the stream should be specified by setting the Content-
+ * Type header via the setRequestHeader method before
+ * calling send.
+ */
+ void send([optional] in nsIVariant body);
+
+ /**
+ * Sets a HTTP request header for HTTP requests. You must call open
+ * before setting the request headers.
+ *
+ * @param header The name of the header to set in the request.
+ * @param value The body of the header.
+ */
+ void setRequestHeader(in ACString header, in ACString value);
+
+ /**
+ * The amount of milliseconds a request can take before being terminated.
+ * Initially zero. Zero means there is no timeout.
+ */
+ attribute unsigned long timeout;
+
+ /**
+ * The state of the request.
+ *
+ * Possible values:
+ * 0 UNSENT open() has not been called yet.
+ * 1 OPENED send() has not been called yet.
+ * 2 HEADERS_RECEIVED
+ * send() has been called, headers and status are available.
+ * 3 LOADING Downloading, responseText holds the partial data.
+ * 4 DONE Finished with all operations.
+ */
+ const unsigned short UNSENT = 0;
+ const unsigned short OPENED = 1;
+ const unsigned short HEADERS_RECEIVED = 2;
+ const unsigned short LOADING = 3;
+ const unsigned short DONE = 4;
+ readonly attribute unsigned short readyState;
+
+ /**
+ * Override the mime type returned by the server (if any). This may
+ * be used, for example, to force a stream to be treated and parsed
+ * as text/xml, even if the server does not report it as such. This
+ * must be done before the <code>send</code> method is invoked.
+ *
+ * @param mimetype The type used to override that returned by the server
+ * (if any).
+ */
+ [binaryname(SlowOverrideMimeType)] void overrideMimeType(in DOMString mimetype);
+
+ /**
+ * Set to true if this is a background service request. This will
+ * prevent a load group being associated with the request, and
+ * suppress any security dialogs from being shown * to the user.
+ * In the cases where one of those dialogs would be shown, the request
+ * will simply fail instead.
+ */
+ attribute boolean mozBackgroundRequest;
+
+ /**
+ * When set to true attempts to make cross-site Access-Control requests
+ * with credentials such as cookies and authorization headers.
+ *
+ * Never affects same-site requests.
+ *
+ * Defaults to false.
+ */
+ attribute boolean withCredentials;
+
+ /**
+ * Initialize the object for use from C++ code with the principal, script
+ * context, and owner window that should be used.
+ *
+ * @param principal The principal to use for the request. This must not be
+ * null.
+ * @param globalObject The associated global for the request. Can be the
+ * outer window, a sandbox, or a backstage pass.
+ * May be null, but then the request cannot create a
+ * document.
+ * @param baseURI The base URI to use when resolving relative URIs. May be
+ * null.
+ * @param loadGroup An optional load group to use when performing the request.
+ * This will be used even if the global has a window with a
+ * load group.
+ */
+ [noscript] void init(in nsIPrincipal principal,
+ in nsIGlobalObject globalObject,
+ in nsIURI baseURI,
+ [optional] in nsILoadGroup loadGroup);
+
+ /**
+ * Upload process can be tracked by adding event listener to |upload|.
+ */
+ readonly attribute nsIXMLHttpRequestUpload upload;
+
+ /**
+ * Meant to be a script-only mechanism for setting a callback function.
+ * The attribute is expected to be JavaScript function object. When the
+ * readyState changes, the callback function will be called.
+ * This attribute should not be used from native code!!
+ *
+ * After the initial response, all event listeners will be cleared.
+ * // XXXbz what does that mean, exactly?
+ *
+ * Call open() before setting an onreadystatechange listener.
+ */
+ [implicit_jscontext] attribute jsval onreadystatechange;
+
+ /**
+ * If true, the request will be sent without cookie and authentication
+ * headers.
+ */
+ readonly attribute boolean mozAnon;
+
+ /**
+ * If true, the same origin policy will not be enforced on the request.
+ */
+ readonly attribute boolean mozSystem;
+};
+
+[uuid(840d0d00-e83e-4a29-b3c7-67e96e90a499)]
+interface nsIXHRSendable : nsISupports {
+ void getSendInfo(out nsIInputStream body,
+ out uint64_t contentLength,
+ out ACString contentType,
+ out ACString charset);
+};
+
+/**
+ * @deprecated
+ */
+[scriptable, uuid(8ae70a39-edf1-40b4-a992-472d23421c25)]
+interface nsIJSXMLHttpRequest : nsISupports {
+};
+
+%{ C++
+#define NS_XMLHTTPREQUEST_CID \
+ { /* d164e770-4157-11d4-9a42-000064657374 */ \
+ 0xd164e770, 0x4157, 0x11d4, \
+ {0x9a, 0x42, 0x00, 0x00, 0x64, 0x65, 0x73, 0x74} }
+#define NS_XMLHTTPREQUEST_CONTRACTID \
+"@mozilla.org/xmlextras/xmlhttprequest;1"
+%}