OLD | NEW |
(Empty) | |
| 1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
| 2 /* ***** BEGIN LICENSE BLOCK ***** |
| 3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
| 4 * |
| 5 * The contents of this file are subject to the Mozilla Public License Version |
| 6 * 1.1 (the "License"); you may not use this file except in compliance with |
| 7 * the License. You may obtain a copy of the License at |
| 8 * http://www.mozilla.org/MPL/ |
| 9 * |
| 10 * Software distributed under the License is distributed on an "AS IS" basis, |
| 11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License |
| 12 * for the specific language governing rights and limitations under the |
| 13 * License. |
| 14 * |
| 15 * The Original Code is mozilla.org code. |
| 16 * |
| 17 * The Initial Developer of the Original Code is |
| 18 * Netscape Communications Corporation. |
| 19 * Portions created by the Initial Developer are Copyright (C) 1998 |
| 20 * the Initial Developer. All Rights Reserved. |
| 21 * |
| 22 * Contributor(s): |
| 23 * |
| 24 * Alternatively, the contents of this file may be used under the terms of |
| 25 * either the GNU General Public License Version 2 or later (the "GPL"), or |
| 26 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), |
| 27 * in which case the provisions of the GPL or the LGPL are applicable instead |
| 28 * of those above. If you wish to allow use of your version of this file only |
| 29 * under the terms of either the GPL or the LGPL, and not to allow others to |
| 30 * use your version of this file under the terms of the MPL, indicate your |
| 31 * decision by deleting the provisions above and replace them with the notice |
| 32 * and other provisions required by the GPL or the LGPL. If you do not delete |
| 33 * the provisions above, a recipient may use your version of this file under |
| 34 * the terms of any one of the MPL, the GPL or the LGPL. |
| 35 * |
| 36 * ***** END LICENSE BLOCK ***** */ |
| 37 |
| 38 #include "nsIRequest.idl" |
| 39 |
| 40 interface nsIURI; |
| 41 interface nsIInterfaceRequestor; |
| 42 interface nsIInputStream; |
| 43 interface nsIStreamListener; |
| 44 |
| 45 /** |
| 46 * The nsIChannel interface allows clients to construct "GET" requests for |
| 47 * specific protocols, and manage them in a uniform way. Once a channel is |
| 48 * created (via nsIIOService::newChannel), parameters for that request may |
| 49 * be set by using the channel attributes, or by QI'ing to a subclass of |
| 50 * nsIChannel for protocol-specific parameters. Then, the URI can be fetched |
| 51 * by calling nsIChannel::open or nsIChannel::asyncOpen. |
| 52 * |
| 53 * After a request has been completed, the channel is still valid for accessing |
| 54 * protocol-specific results. For example, QI'ing to nsIHttpChannel allows |
| 55 * response headers to be retrieved for the corresponding http transaction. |
| 56 * |
| 57 * @status FROZEN |
| 58 */ |
| 59 [scriptable, uuid(c63a055a-a676-4e71-bf3c-6cfa11082018)] |
| 60 interface nsIChannel : nsIRequest |
| 61 { |
| 62 /** |
| 63 * The original URI used to construct the channel. This is used in the case |
| 64 * of a redirect or URI "resolution" (e.g. resolving a resource: URI to a |
| 65 * file: URI) so that the original pre-redirect URI can still be obtained. |
| 66 * |
| 67 * NOTE: this is distinctly different from the http Referer (referring URI), |
| 68 * which is typically the page that contained the original URI (accessible |
| 69 * from nsIHttpChannel). |
| 70 */ |
| 71 attribute nsIURI originalURI; |
| 72 |
| 73 /** |
| 74 * The URI corresponding to the channel. Its value is immutable. |
| 75 */ |
| 76 readonly attribute nsIURI URI; |
| 77 |
| 78 /** |
| 79 * The owner, corresponding to the entity that is responsible for this |
| 80 * channel. Used by the security manager to grant or deny privileges to |
| 81 * mobile code loaded from this channel. |
| 82 * |
| 83 * NOTE: this is a strong reference to the owner, so if the owner is also |
| 84 * holding a strong reference to the channel, care must be taken to |
| 85 * explicitly drop its reference to the channel. |
| 86 */ |
| 87 attribute nsISupports owner; |
| 88 |
| 89 /** |
| 90 * The notification callbacks for the channel. This is set by clients, who |
| 91 * wish to provide a means to receive progress, status and protocol-specific
|
| 92 * notifications. If this value is NULL, the channel implementation may use |
| 93 * the notification callbacks from its load group. The channel may also |
| 94 * query the notification callbacks from its load group if its notification |
| 95 * callbacks do not supply the requested interface. |
| 96 * |
| 97 * Interfaces commonly requested include: nsIProgressEventSink, nsIPrompt, |
| 98 * and nsIAuthPrompt. |
| 99 * |
| 100 * When the channel is done, it must not continue holding references to |
| 101 * this object. |
| 102 * |
| 103 * NOTE: A channel implementation should take care when "caching" an |
| 104 * interface pointer queried from its notification callbacks. If the |
| 105 * notification callbacks are changed, then a cached interface pointer may |
| 106 * become invalid and may therefore need to be re-queried. |
| 107 */ |
| 108 attribute nsIInterfaceRequestor notificationCallbacks; |
| 109 |
| 110 /** |
| 111 * Transport-level security information (if any) corresponding to the channe
l. |
| 112 */ |
| 113 readonly attribute nsISupports securityInfo; |
| 114 |
| 115 /** |
| 116 * The MIME type of the channel's content if available. |
| 117 * |
| 118 * NOTE: the content type can often be wrongly specified (e.g., wrong file |
| 119 * extension, wrong MIME type, wrong document type stored on a server, etc.)
, |
| 120 * and the caller most likely wants to verify with the actual data. |
| 121 * |
| 122 * Setting contentType before the channel has been opened provides a hint |
| 123 * to the channel as to what the MIME type is. The channel may ignore this |
| 124 * hint in deciding on the actual MIME type that it will report. |
| 125 * |
| 126 * Setting contentType after onStartRequest has been fired or after open() |
| 127 * is called will override the type determined by the channel. |
| 128 * |
| 129 * Setting contentType between the time that asyncOpen() is called and the |
| 130 * time when onStartRequest is fired has undefined behavior at this time. |
| 131 * |
| 132 * The value of the contentType attribute is a lowercase string. A value |
| 133 * assigned to this attribute will be parsed and normalized as follows: |
| 134 * 1- any parameters (delimited with a ';') will be stripped. |
| 135 * 2- if a charset parameter is given, then its value will replace the |
| 136 * the contentCharset attribute of the channel. |
| 137 * 3- the stripped contentType will be lowercased. |
| 138 * Any implementation of nsIChannel must follow these rules. |
| 139 */ |
| 140 attribute ACString contentType; |
| 141 |
| 142 /** |
| 143 * The character set of the channel's content if available and if applicable
. |
| 144 * This attribute only applies to textual data. |
| 145 * |
| 146 * The value of the contentCharset attribute is a mixedcase string. |
| 147 */ |
| 148 attribute ACString contentCharset; |
| 149 |
| 150 /** |
| 151 * The length of the data associated with the channel if available. A value |
| 152 * of -1 indicates that the content length is unknown. |
| 153 * |
| 154 * Callers should prefer getting the "content-length" property |
| 155 * as 64-bit value by QIing the channel to nsIPropertyBag2, |
| 156 * if that interface is exposed by the channel. |
| 157 */ |
| 158 attribute long contentLength; |
| 159 |
| 160 /** |
| 161 * Synchronously open the channel. |
| 162 * |
| 163 * @return blocking input stream to the channel's data. |
| 164 * |
| 165 * NOTE: nsIChannel implementations are not required to implement this |
| 166 * method. Moreover, since this method may block the calling thread, it |
| 167 * should not be called on a thread that processes UI events. |
| 168 */ |
| 169 nsIInputStream open(); |
| 170 |
| 171 /** |
| 172 * Asynchronously open this channel. Data is fed to the specified stream |
| 173 * listener as it becomes available. The stream listener's methods are |
| 174 * called on the thread that calls asyncOpen and are not called until |
| 175 * after asyncOpen returns. |
| 176 * |
| 177 * @param aListener the nsIStreamListener implementation |
| 178 * @param aContext an opaque parameter forwarded to aListener's methods |
| 179 */ |
| 180 void asyncOpen(in nsIStreamListener aListener, in nsISupports aContext); |
| 181 |
| 182 /************************************************************************** |
| 183 * Channel specific load flags: |
| 184 * |
| 185 * Bits 21-31 are reserved for future use by this interface or one of its |
| 186 * derivatives (e.g., see nsICachingChannel). |
| 187 */ |
| 188 |
| 189 /** |
| 190 * Set (e.g., by the docshell) to indicate whether or not the channel |
| 191 * corresponds to a document URI. |
| 192 */ |
| 193 const unsigned long LOAD_DOCUMENT_URI = 1 << 16; |
| 194 |
| 195 /** |
| 196 * If the end consumer for this load has been retargeted after discovering |
| 197 * it's content, this flag will be set: |
| 198 */ |
| 199 const unsigned long LOAD_RETARGETED_DOCUMENT_URI = 1 << 17; |
| 200 |
| 201 /** |
| 202 * This flag is set to indicate that onStopRequest may be followed by |
| 203 * another onStartRequest/onStopRequest pair. This flag is, for example, |
| 204 * used by the multipart/replace stream converter. |
| 205 */ |
| 206 const unsigned long LOAD_REPLACE = 1 << 18; |
| 207 |
| 208 /** |
| 209 * Set (e.g., by the docshell) to indicate whether or not the channel |
| 210 * corresponds to an initial document URI load (e.g., link click). |
| 211 */ |
| 212 const unsigned long LOAD_INITIAL_DOCUMENT_URI = 1 << 19; |
| 213 |
| 214 /** |
| 215 * Set (e.g., by the URILoader) to indicate whether or not the end consumer |
| 216 * for this load has been determined. |
| 217 */ |
| 218 const unsigned long LOAD_TARGETED = 1 << 20; |
| 219 }; |
OLD | NEW |