nsIXMLHttpRequest.idl

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- *//* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */#include "nsISupports.idl"
interface nsIChannel;
interface nsIDOMDocument;
interface nsIDOMEventListener;
interface nsIPrincipal;
interface nsIScriptContext;
interface nsIVariant;
interface nsPIDOMWindow;
/** * 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. * * Though actually, if you use addEventListener from C++ weird things will * happen too, since the result will depend on what JS happens to be on the * stack when you do it.... * * 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(acda85ab-d06c-4176-b834-6d129ca97ca3)]
00094 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. * * In a multipart request case, this is the initial channel, not the * different parts in the multipart request. * * Mozilla only. Requires elevated privileges to access. */00107 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. */00115 readonly attribute nsIDOMDocument responseXML;
/** * The response to the request as text. * NULL if the request is unsuccessful or * has not yet been sent. */00122 readonly attribute AString responseText;
/** * The status of the response to the request for HTTP requests. */00128 readonly attribute unsignedlong status;
/** * The string representing the status of the response for * HTTP requests. */00134 readonly attribute AUTF8String statusText;
/** * If the request has been sent already, this method will * abort the request. */void abort();
/** * Returns all of the response headers as a string for HTTP * requests. * * Note that this will return all the headers from the *current* * part of a multipart request, not from the original channel. * * @returns A string containing all of the response headers. * NULL if the response has not yet been received. */string 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 AUTF8String header);
/** * Native (non-script) method to initialize a request. Note that * the request is not sent until the <code>send</code> method * is invoked. * * If there is an "active" request (that is, if open() or openRequest() has * been called already), this is equivalent to calling abort(). * * @param method The HTTP method, for example "POST" or "GET". Ignored * if the URL is not a HTTP(S) URL. * @param url The URL to which to send the request. * @param async 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. * This argument must be true if the multipart * attribute has been set to true, or an exception will * be thrown. * @param user A username for authentication if necessary. * @param password A password for authentication if necessary. */
[noscript] void openRequest(in AUTF8String method,
in AUTF8String url,
in boolean async,
in AString user,
in AString password);
/** * Meant to be a script-only method for initializing a request. * The parameters are similar to the ones detailed in the * description of <code>openRequest</code>, but the last * 3 are optional. * * If there is an "active" request (that is, if open() or openRequest() has * been called already), this is equivalent to calling abort(). * * @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. * This argument must be true if the multipart * attribute has been set to true, or an exception will * be thrown. * @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 */void open(in AUTF8String method, in AUTF8String url);
/** * 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(in nsIVariant body);
/** * A variant of the send() method used to send binary data. * * @param body The request body as a DOM string. The string data will be * converted to a single-byte string by truncation (i.e., the * high-order byte of each character will be discarded). */void sendAsBinary(in DOMString 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 AUTF8String header, in AUTF8String value);
/** * The state of the request. * * Possible values: * 0 UNINITIALIZED open() has not been called yet. * 1 LOADING send() has not been called yet. * 2 LOADED send() has been called, headers and status are available. * 3 INTERACTIVE Downloading, responseText holds the partial data. * 4 COMPLETED Finished with all operations. */00276 readonly attribute long 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). */void overrideMimeType(in AUTF8String mimetype);
/** * Set to true if the response is expected to be a stream of * possibly multiple (XML) documents. If set to true, the content * type of the initial response must be multipart/x-mixed-replace or * an error will be triggerd. All requests must be asynchronous. * * This enables server push. For each XML document that's written to * this request, a new XML DOM document is created and the onload * handler is called inbetween documents. Note that when this is * set, the onload handler and other event handlers are not reset * after the first XML document is loaded, and the onload handler * will be called as each part of the response is received. */00302 attribute boolean multipart;
/** * 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. */00311 attribute boolean mozBackgroundRequest;
/** * 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 scriptContext The script context to use for the request. May be * null. * @param ownerWindow The associated window for the request. May be null. */
[noscript] void init(in nsIPrincipal principal,
in nsIScriptContext scriptContext,
in nsPIDOMWindow ownerWindow);
};
[scriptable, uuid(261676b4-d508-43bf-b099-74635a0ee2e9)]
interface nsIJSXMLHttpRequest : nsISupports { /** * Meant to be a script-only mechanism for setting a load event listener. * The attribute is expected to be JavaScript function object. When * the load event occurs, the function is invoked. * 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 onload listener. * * Mozilla only. */
attribute nsIDOMEventListener onload;
/** * Meant to be a script-only mechanism for setting an error event listener. * The attribute is expected to be JavaScript function object. When * the error event occurs, the function is invoked. * 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 onerror listener. * * Mozilla only. */
attribute nsIDOMEventListener onerror;
/** * Meant to be a script-only mechanism for setting a progress event listener. * The attribute is expected to be JavaScript function object. When * the error event occurs, the function is invoked. * This attribute should not be used from native code!! * This event listener may be called multiple times during the open request. * * After the initial response, all event listeners will be cleared. * // XXXbz what does that mean, exactly? * * This event listener must be set BEFORE calling open(). * * Mozilla only. */
attribute nsIDOMEventListener onprogress;
/** * Meant to be a script-only mechanism for setting an upload progress event * listener. * This attribute should not be used from native code!! * This event listener may be called multiple times during the upload.. * * After the initial response, all event listeners will be cleared. * // XXXbz what does that mean, exactly? * * This event listener must be set BEFORE calling open(). * * Mozilla only. */
attribute nsIDOMEventListener onuploadprogress;
/** * 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. */
attribute nsIDOMEventListener onreadystatechange;
};
%{ 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"%}