/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * 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. * * The Initial Developer of the Original Code is Netscape * Communications. Portions created by Netscape Communications are * Copyright (C) 2001 by Netscape Communications. All * Rights Reserved. * * Contributor(s): * Gagan Saksena (original author) * Darin Fisher */ #include "nsIChannel.idl" interface nsIHttpHeaderVisitor; interface nsISimpleEnumerator; [scriptable, uuid(d78b53c8-d03f-4fd8-b2ee-7b36fcd150d1)] interface nsIHttpChannel : nsIChannel { /************************************************************************** * Request info... */ /** * The request method is case insensitive */ attribute ACString requestMethod; /** * Get/set the referrer URI on the request. This is the address (URI) of * the resource from which this channel's URI was obtained (see RFC2616 * section 14.36). The referrer type may be used to block the referrer * from being sent in certain cases. */ readonly attribute nsIURI referrer; void setReferrer(in nsIURI referrer, in unsigned long referrerType); /* possible values for the referrerType */ const unsigned long REFERRER_NONE = 0; const unsigned long REFERRER_LINK_CLICK = 1; // http link clicks const unsigned long REFERRER_INLINES = 2; // images and other inlines const unsigned long REFERRER_NON_HTTP = 3; // e.g. news or FTP clicks /** * An http channel can own a reference to the document URI */ attribute nsIURI documentURI; /** * Header strings are case insensitive */ ACString getRequestHeader(in ACString header); void setRequestHeader(in ACString header, in ACString value); void visitRequestHeaders(in nsIHttpHeaderVisitor visitor); /** * Get the stream (to be) uploaded by this HTTP channel. */ readonly attribute nsIInputStream uploadStream; /************************************************************************** * Response info... */ readonly attribute unsigned long responseStatus; readonly attribute ACString responseStatusText; /** * Header strings are case insensitive */ ACString getResponseHeader(in ACString header); void setResponseHeader(in ACString header, in ACString value); void visitResponseHeaders(in nsIHttpHeaderVisitor visitor); /** * True if the server sent a "Cache-control: no-store" response header. */ boolean isNoStoreResponse(); /** * True if the server sent the equivalent of a "Cache-control: no-cache" * response header. Other equivalent response headers include: "Pragma: * no-cache" and "Expires" with a date-value in the past. */ boolean isNoCacheResponse(); /** * This attribute holds the MIME types corresponding to the content * encodings on the channel. The enumerator returns nsISupportsString * objects. The first one corresponds to the outermost encoding on the * channel and then we work our way inward. "identity" is skipped and not * represented on the list. Unknown encodings make the enumeration stop. * If you want the actual Content-Encoding value, use * getResponseHeader("Content-Encoding"). * * When there is no Content-Encoding header, this property is null. * * Modifying the Content-Encoding header on the channel will case * this enumerator to have undefined behavior. Don't do it. */ readonly attribute nsISimpleEnumerator contentEncodings; /** * This attribute controls whether or not content conversion should be * done per the Content-Encoding response header. * * TRUE by default. */ attribute boolean applyConversion; /** * This attribute is a hint to the channel to indicate whether or not * the underlying HTTP transaction should be allowed to be pipelined * with other transactions. This should be set to FALSE, for example, * if the application knows that the corresponding document is likely * to be very large. * * TRUE by default, though other factors may prevent pipelining. */ attribute boolean allowPipelining; /** * This attribute specifies the number of redirects this channel is allowed * to make. If zero, the channel will fail to redirect and will generate * a NS_ERROR_REDIRECT_LOOP failure status. */ attribute unsigned long redirectionLimit; }; /** * Implement this interface to visit http headers. */ [scriptable, uuid(0cf40717-d7c1-4a94-8c1e-d6c9734101bb)] interface nsIHttpHeaderVisitor : nsISupports { /** * @throw any exception to terminate enumeration */ void visitHeader(in ACString header, in ACString value); }; .