|
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
|
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 "nsIChannel.idl" |
|
7 |
|
8 interface nsIHttpHeaderVisitor; |
|
9 |
|
10 /** |
|
11 * nsIHttpChannel |
|
12 * |
|
13 * This interface allows for the modification of HTTP request parameters and |
|
14 * the inspection of the resulting HTTP response status and headers when they |
|
15 * become available. |
|
16 */ |
|
17 [scriptable, uuid(a01362a0-5c45-11e2-bcfd-0800200c9a66)] |
|
18 interface nsIHttpChannel : nsIChannel |
|
19 { |
|
20 /************************************************************************** |
|
21 * REQUEST CONFIGURATION |
|
22 * |
|
23 * Modifying request parameters after asyncOpen has been called is an error. |
|
24 */ |
|
25 |
|
26 /** |
|
27 * Set/get the HTTP request method (default is "GET"). Setter is case |
|
28 * insensitive; getter returns an uppercase string. |
|
29 * |
|
30 * This attribute may only be set before the channel is opened. |
|
31 * |
|
32 * NOTE: The data for a "POST" or "PUT" request can be configured via |
|
33 * nsIUploadChannel; however, after setting the upload data, it may be |
|
34 * necessary to set the request method explicitly. The documentation |
|
35 * for nsIUploadChannel has further details. |
|
36 * |
|
37 * @throws NS_ERROR_IN_PROGRESS if set after the channel has been opened. |
|
38 */ |
|
39 attribute ACString requestMethod; |
|
40 |
|
41 /** |
|
42 * Get/set the HTTP referrer URI. This is the address (URI) of the |
|
43 * resource from which this channel's URI was obtained (see RFC2616 section |
|
44 * 14.36). |
|
45 * |
|
46 * This attribute may only be set before the channel is opened. |
|
47 * |
|
48 * NOTE: The channel may silently refuse to set the Referer header if the |
|
49 * URI does not pass certain security checks (e.g., a "https://" URL will |
|
50 * never be sent as the referrer for a plaintext HTTP request). The |
|
51 * implementation is not required to throw an exception when the referrer |
|
52 * URI is rejected. |
|
53 * |
|
54 * @throws NS_ERROR_IN_PROGRESS if set after the channel has been opened. |
|
55 */ |
|
56 attribute nsIURI referrer; |
|
57 |
|
58 /** |
|
59 * Read the proxy URI, which, if non-null, will be used to resolve |
|
60 * proxies for this channel. |
|
61 */ |
|
62 readonly attribute nsIURI proxyURI; |
|
63 |
|
64 /** |
|
65 * Get the value of a particular request header. |
|
66 * |
|
67 * @param aHeader |
|
68 * The case-insensitive name of the request header to query (e.g., |
|
69 * "Cache-Control"). |
|
70 * |
|
71 * @return the value of the request header. |
|
72 * @throws NS_ERROR_NOT_AVAILABLE if the header is not set. |
|
73 */ |
|
74 ACString getRequestHeader(in ACString aHeader); |
|
75 |
|
76 /** |
|
77 * Set the value of a particular request header. |
|
78 * |
|
79 * This method allows, for example, the cookies module to add "Cookie" |
|
80 * headers to the outgoing HTTP request. |
|
81 * |
|
82 * This method may only be called before the channel is opened. |
|
83 * |
|
84 * @param aHeader |
|
85 * The case-insensitive name of the request header to set (e.g., |
|
86 * "Cookie"). |
|
87 * @param aValue |
|
88 * The request header value to set (e.g., "X=1"). |
|
89 * @param aMerge |
|
90 * If true, the new header value will be merged with any existing |
|
91 * values for the specified header. This flag is ignored if the |
|
92 * specified header does not support merging (e.g., the "Content- |
|
93 * Type" header can only have one value). The list of headers for |
|
94 * which this flag is ignored is an implementation detail. If this |
|
95 * flag is false, then the header value will be replaced with the |
|
96 * contents of |aValue|. |
|
97 * |
|
98 * If aValue is empty and aMerge is false, the header will be cleared. |
|
99 * |
|
100 * @throws NS_ERROR_IN_PROGRESS if called after the channel has been |
|
101 * opened. |
|
102 */ |
|
103 void setRequestHeader(in ACString aHeader, |
|
104 in ACString aValue, |
|
105 in boolean aMerge); |
|
106 |
|
107 /** |
|
108 * Call this method to visit all request headers. Calling setRequestHeader |
|
109 * while visiting request headers has undefined behavior. Don't do it! |
|
110 * |
|
111 * @param aVisitor |
|
112 * the header visitor instance. |
|
113 */ |
|
114 void visitRequestHeaders(in nsIHttpHeaderVisitor aVisitor); |
|
115 |
|
116 /** |
|
117 * This attribute is a hint to the channel to indicate whether or not |
|
118 * the underlying HTTP transaction should be allowed to be pipelined |
|
119 * with other transactions. This should be set to FALSE, for example, |
|
120 * if the application knows that the corresponding document is likely |
|
121 * to be very large. |
|
122 * |
|
123 * This attribute is true by default, though other factors may prevent |
|
124 * pipelining. |
|
125 * |
|
126 * This attribute may only be set before the channel is opened. |
|
127 * |
|
128 * @throws NS_ERROR_FAILURE if set after the channel has been opened. |
|
129 */ |
|
130 attribute boolean allowPipelining; |
|
131 |
|
132 /** |
|
133 * This attribute specifies the number of redirects this channel is allowed |
|
134 * to make. If zero, the channel will fail to redirect and will generate |
|
135 * a NS_ERROR_REDIRECT_LOOP failure status. |
|
136 * |
|
137 * NOTE: An HTTP redirect results in a new channel being created. If the |
|
138 * new channel supports nsIHttpChannel, then it will be assigned a value |
|
139 * to its |redirectionLimit| attribute one less than the value of the |
|
140 * redirected channel's |redirectionLimit| attribute. The initial value |
|
141 * for this attribute may be a configurable preference (depending on the |
|
142 * implementation). |
|
143 */ |
|
144 attribute unsigned long redirectionLimit; |
|
145 |
|
146 |
|
147 /************************************************************************** |
|
148 * RESPONSE INFO |
|
149 * |
|
150 * Accessing response info before the onStartRequest event is an error. |
|
151 */ |
|
152 |
|
153 /** |
|
154 * Get the HTTP response code (e.g., 200). |
|
155 * |
|
156 * @throws NS_ERROR_NOT_AVAILABLE if called before the response |
|
157 * has been received (before onStartRequest). |
|
158 */ |
|
159 readonly attribute unsigned long responseStatus; |
|
160 |
|
161 /** |
|
162 * Get the HTTP response status text (e.g., "OK"). |
|
163 * |
|
164 * NOTE: This returns the raw (possibly 8-bit) text from the server. There |
|
165 * are no assumptions made about the charset of the returned text. You |
|
166 * have been warned! |
|
167 * |
|
168 * @throws NS_ERROR_NOT_AVAILABLE if called before the response |
|
169 * has been received (before onStartRequest). |
|
170 */ |
|
171 readonly attribute ACString responseStatusText; |
|
172 |
|
173 /** |
|
174 * Returns true if the HTTP response code indicates success. The value of |
|
175 * nsIRequest::status will be NS_OK even when processing a 404 response |
|
176 * because a 404 response may include a message body that (in some cases) |
|
177 * should be shown to the user. |
|
178 * |
|
179 * Use this attribute to distinguish server error pages from normal pages, |
|
180 * instead of comparing the response status manually against the set of |
|
181 * valid response codes, if that is required by your application. |
|
182 * |
|
183 * @throws NS_ERROR_NOT_AVAILABLE if called before the response |
|
184 * has been received (before onStartRequest). |
|
185 */ |
|
186 readonly attribute boolean requestSucceeded; |
|
187 |
|
188 /** |
|
189 * Get the value of a particular response header. |
|
190 * |
|
191 * @param aHeader |
|
192 * The case-insensitive name of the response header to query (e.g., |
|
193 * "Set-Cookie"). |
|
194 * |
|
195 * @return the value of the response header. |
|
196 * |
|
197 * @throws NS_ERROR_NOT_AVAILABLE if called before the response |
|
198 * has been received (before onStartRequest) or if the header is |
|
199 * not set in the response. |
|
200 */ |
|
201 ACString getResponseHeader(in ACString header); |
|
202 |
|
203 /** |
|
204 * Set the value of a particular response header. |
|
205 * |
|
206 * This method allows, for example, the HTML content sink to inform the HTTP |
|
207 * channel about HTTP-EQUIV headers found in HTML <META> tags. |
|
208 * |
|
209 * @param aHeader |
|
210 * The case-insensitive name of the response header to set (e.g., |
|
211 * "Cache-control"). |
|
212 * @param aValue |
|
213 * The response header value to set (e.g., "no-cache"). |
|
214 * @param aMerge |
|
215 * If true, the new header value will be merged with any existing |
|
216 * values for the specified header. This flag is ignored if the |
|
217 * specified header does not support merging (e.g., the "Content- |
|
218 * Type" header can only have one value). The list of headers for |
|
219 * which this flag is ignored is an implementation detail. If this |
|
220 * flag is false, then the header value will be replaced with the |
|
221 * contents of |aValue|. |
|
222 * |
|
223 * If aValue is empty and aMerge is false, the header will be cleared. |
|
224 * |
|
225 * @throws NS_ERROR_NOT_AVAILABLE if called before the response |
|
226 * has been received (before onStartRequest). |
|
227 * @throws NS_ERROR_ILLEGAL_VALUE if changing the value of this response |
|
228 * header is not allowed. |
|
229 */ |
|
230 void setResponseHeader(in ACString header, |
|
231 in ACString value, |
|
232 in boolean merge); |
|
233 |
|
234 /** |
|
235 * Call this method to visit all response headers. Calling |
|
236 * setResponseHeader while visiting response headers has undefined |
|
237 * behavior. Don't do it! |
|
238 * |
|
239 * @param aVisitor |
|
240 * the header visitor instance. |
|
241 * |
|
242 * @throws NS_ERROR_NOT_AVAILABLE if called before the response |
|
243 * has been received (before onStartRequest). |
|
244 */ |
|
245 void visitResponseHeaders(in nsIHttpHeaderVisitor aVisitor); |
|
246 |
|
247 /** |
|
248 * Returns true if the server sent a "Cache-Control: no-store" response |
|
249 * header. |
|
250 * |
|
251 * @throws NS_ERROR_NOT_AVAILABLE if called before the response |
|
252 * has been received (before onStartRequest). |
|
253 */ |
|
254 boolean isNoStoreResponse(); |
|
255 |
|
256 /** |
|
257 * Returns true if the server sent the equivalent of a "Cache-control: |
|
258 * no-cache" response header. Equivalent response headers include: |
|
259 * "Pragma: no-cache", "Expires: 0", and "Expires" with a date value |
|
260 * in the past relative to the value of the "Date" header. |
|
261 * |
|
262 * @throws NS_ERROR_NOT_AVAILABLE if called before the response |
|
263 * has been received (before onStartRequest). |
|
264 */ |
|
265 boolean isNoCacheResponse(); |
|
266 |
|
267 /** |
|
268 * Instructs the channel to immediately redirect to a new destination. |
|
269 * Can only be called on channels not yet opened. |
|
270 * |
|
271 * This method provides no explicit conflict resolution. The last |
|
272 * caller to call it wins. |
|
273 * |
|
274 * @throws NS_ERROR_ALREADY_OPENED if called after the channel |
|
275 * has been opened. |
|
276 */ |
|
277 void redirectTo(in nsIURI aNewURI); |
|
278 }; |