Interface nsIChannelType

The nsIChannel interface allows clients to construct "GET" requests for specific protocols, and manage them in a uniform way. Once a channel is created (via nsIIOService::newChannel), parameters for that request may be set by using the channel attributes, or by QI'ing to a subclass of nsIChannel for protocol-specific parameters. Then, the URI can be fetched by calling nsIChannel::open or nsIChannel::asyncOpen.

After a request has been completed, the channel is still valid for accessing protocol-specific results. For example, QI'ing to nsIHttpChannel allows response headers to be retrieved for the corresponding http transaction.

This interface must be used only from the XPCOM main thread.

Hierarchy

Properties

URI: nsIURI

The URI corresponding to the channel. Its value is immutable.

canceled: boolean

True if the channel has been canceled.

canceledReason: string
contentCharset: string

The character set of the channel's content if available and if applicable. This attribute only applies to textual data.

The value of the contentCharset attribute is a mixedcase string.

contentDisposition: number

Access to the type implied or stated by the Content-Disposition header if available and if applicable. This allows determining inline versus attachment.

Setting contentDisposition provides a hint to the channel about the disposition. If the hint is DISPOSITION_ATTACHMENT and a normal Content-Disposition header is present, the hinted value will always be used. If the hint is DISPOSITION_FORCE_INLINE then the disposition is inline and the header is not used. The value from Content-Disposition header is only used when the hinted value is not DISPOSITION_INLINE or DISPOSITION_FORCE_INLINE. If the header is missing the hinted value will be used if set.

Implementations should throw NS_ERROR_NOT_AVAILABLE if the header either doesn't exist for this type of channel or is empty, and return DISPOSITION_ATTACHMENT if an invalid/noncompliant value is present.

contentDispositionFilename: string

Access to the filename portion of the Content-Disposition header if available and if applicable. This allows getting the preferred filename without having to parse it out yourself.

Setting contentDispositionFilename provides a hint to the channel about the disposition. If a normal Content-Disposition header is present its value will always be used. If it is missing the hinted value will be used if set.

Implementations should throw NS_ERROR_NOT_AVAILABLE if the header doesn't exist for this type of channel, if the header is empty, if the header doesn't contain a filename portion, or the value of the filename attribute is empty/missing.

contentDispositionHeader: string

Access to the raw Content-Disposition header if available and applicable.

Implementations should throw NS_ERROR_NOT_AVAILABLE if the header either doesn't exist for this type of channel or is empty.

Deprecated

Use contentDisposition/contentDispositionFilename instead.

contentLength: int64_t

The length of the data associated with the channel if available. A value of -1 indicates that the content length is unknown. Note that this is a 64-bit value and obsoletes the "content-length" property used on some channels.

contentType: string

The MIME type of the channel's content if available.

NOTE: the content type can often be wrongly specified (e.g., wrong file extension, wrong MIME type, wrong document type stored on a server, etc.), and the caller most likely wants to verify with the actual data.

Setting contentType before the channel has been opened provides a hint to the channel as to what the MIME type is. The channel may ignore this hint in deciding on the actual MIME type that it will report.

Setting contentType after onStartRequest has been fired or after open() is called will override the type determined by the channel.

Setting contentType between the time that asyncOpen() is called and the time when onStartRequest is fired has undefined behavior at this time.

The value of the contentType attribute is a lowercase string. A value assigned to this attribute will be parsed and normalized as follows: 1- any parameters (delimited with a ';') will be stripped. 2- if a charset parameter is given, then its value will replace the the contentCharset attribute of the channel. 3- the stripped contentType will be lowercased. Any implementation of nsIChannel must follow these rules.

isDocument: bool

Returns true if the channel is used to create a document. It returns true if the loadFlags have LOAD_DOCUMENT_URI set, or if LOAD_HTML_OBJECT_DATA is set and the channel has the appropriate MIME type. Note: May have the wrong value if called before OnStartRequest as we don't know the MIME type yet.

loadFlags: nsLoadFlags

The load flags of this request. Bits 0-15 are reserved.

When added to a load group, this request's load flags are merged with the load flags of the load group.

loadGroup: nsILoadGroup

The load group of this request. While pending, the request is a member of the load group. It is the responsibility of the request to implement this policy.

loadInfo: nsILoadInfo

The LoadInfo object contains information about a network load, why it was started, and how we plan on using the resulting response. If a network request is redirected, the new channel will receive a new LoadInfo object. The new object will contain mostly the same information as the pre-redirect one, but updated as appropriate. For detailed information about what parts of LoadInfo are updated on redirect, see documentation on individual properties.

name: string

The name of the request. Often this is the URI of the request.

notificationCallbacks: nsIInterfaceRequestor

The notification callbacks for the channel. This is set by clients, who wish to provide a means to receive progress, status and protocol-specific notifications. If this value is NULL, the channel implementation may use the notification callbacks from its load group. The channel may also query the notification callbacks from its load group if its notification callbacks do not supply the requested interface.

Interfaces commonly requested include: nsIProgressEventSink, nsIPrompt, and nsIAuthPrompt/nsIAuthPrompt2.

When the channel is done, it must not continue holding references to this object.

NOTE: A channel implementation should take care when "caching" an interface pointer queried from its notification callbacks. If the notification callbacks are changed, then a cached interface pointer may become invalid and may therefore need to be re-queried.

originalURI: nsIURI

The original URI used to construct the channel. This is used in the case of a redirect or URI "resolution" (e.g. resolving a resource: URI to a file: URI) so that the original pre-redirect URI can still be obtained. This is never null. Attempts to set it to null must throw.

NOTE: this is distinctly different from the http Referer (referring URI), which is typically the page that contained the original URI (accessible from nsIHttpChannel).

NOTE: originalURI isn't yet set on the new channel when asyncOnChannelRedirect is called.

owner: nsISupports

The owner, corresponding to the entity that is responsible for this channel. Used by the security manager to grant or deny privileges to mobile code loaded from this channel.

NOTE: this is a strong reference to the owner, so if the owner is also holding a strong reference to the channel, care must be taken to explicitly drop its reference to the channel.

securityInfo: nsITransportSecurityInfo

Transport-level security information (if any) corresponding to the channel.

NOTE: In some circumstances TLS information is propagated onto non-nsIHttpChannel objects to indicate that their contents were likely delivered over TLS all the same.

FIXME(bz, bug 1528449) is that still true now that document.open() doesn't do this?

status: number

The error status associated with the request.

Methods

  • Increases the reference count for this interface. The associated instance will not be deleted unless the reference count is returned to zero.

    Returns

    The resulting reference count.

    Returns number

  • Parameters

    • aIID: object
    • Optional aInstancePtr: object

    Returns any

  • A run time mechanism for interface discovery.

    Returns

    NS_OK if the interface is supported by the associated instance, NS_NOINTERFACE if it is not.

    aInstancePtr must not be null.

    Parameters

    • aIID: object

      [in] A requested interface IID

    • aInstancePtr: object

      [out] A pointer to an interface pointer to receive the result.

    Returns void

  • Decreases the reference count for this interface. Generally, if the reference count returns to zero, the associated instance is deleted.

    Returns

    The resulting reference count.

    Returns number

  • Asynchronously open this channel. Data is fed to the specified stream listener as it becomes available. The stream listener's methods are called on the thread that calls asyncOpen and are not called until after asyncOpen returns. If asyncOpen returns successfully, the channel promises to call at least onStartRequest and onStopRequest.

    If the nsIRequest object passed to the stream listener's methods is not this channel, an appropriate onChannelRedirect notification needs to be sent to the notification callbacks before onStartRequest is called. Once onStartRequest is called, all following method calls on aListener will get the request that was passed to onStartRequest.

    If the channel's and loadgroup's notification callbacks do not provide an nsIChannelEventSink when onChannelRedirect would be called, that's equivalent to having called onChannelRedirect.

    If asyncOpen returns successfully, the channel is responsible for keeping itself alive until it has called onStopRequest on aListener or called onChannelRedirect.

    Implementations are allowed to synchronously add themselves to the associated load group (if any).

    NOTE: Implementations should throw NS_ERROR_ALREADY_OPENED if the channel is reopened. NOTE: Implementations should throw an error if the channel has been cancelled prior asyncOpen being called.

    See

    nsIChannelEventSink for onChannelRedirect

    Parameters

    • aListener: nsIStreamListener

      the nsIStreamListener implementation

    Returns void

  • Cancels the current request. This will close any open input or output streams and terminate any async requests. Users should normally pass NS_BINDING_ABORTED, although other errors may also be passed. The error passed in will become the value of the status attribute.

    Implementations must not send any notifications (e.g. via nsIRequestObserver) synchronously from this function. Similarly, removal from the load group (if any) must also happen asynchronously.

    Requests that use nsIStreamListener must not call onDataAvailable anymore after cancel has been called.

    Parameters

    • aStatus: number

      the reason for canceling this request.

      NOTE: most nsIRequest implementations expect aStatus to be a failure code; however, some implementations may allow aStatus to be a success code such as NS_OK. In general, aStatus should be a failure code.

    Returns void

  • Parameters

    • aStatus: number
    • aReason: string

    Returns void

  • These methods encode/decode the TRR mode to/from the loadFlags. Helper methods Get/SetTRRModeImpl are provided so implementations don't need to duplicate code.

    Requests with TRR_DEFAULT_MODE will use the mode indicated by the pref

    • see network.trr.mode in all.js Requests with TRR_DISABLED_MODE will always use native DNS, even if the pref is set to mode3 (TRR-only). Requests with TRR_FIRST_MODE will first use TRR then fallback to regular DNS, unless TRR is disabled by setting the pref to mode5, parental control being enabled, or the domain being in the exclusion list. Requests with TRR_ONLY_MODE will only use TRR, unless not allowed by the same conditions mentioned above.

    Returns nsIRequest_TRRMode

  • Indicates whether the request is pending. nsIRequest::isPending is true when there is an outstanding asynchronous event that will make the request no longer be pending. Requests do not necessarily start out pending; in some cases, requests have to be explicitly initiated (e.g. nsIChannel implementations are only pending once asyncOpen returns successfully).

    Requests can become pending multiple times during their lifetime.

    Returns

    TRUE if the request has yet to reach completion.

    Returns

    FALSE if the request has reached completion (e.g., after OnStopRequest has fired).

    Note

    Suspended requests are still considered pending.

    Returns boolean

  • Synchronously open the channel.

    Returns

    blocking input stream to the channel's data.

    NOTE: nsIChannel implementations are not required to implement this method. Moreover, since this method may block the calling thread, it should not be called on a thread that processes UI events. Like any other nsIChannel method it must not be called on any thread other than the XPCOM main thread.

    NOTE: Implementations should throw NS_ERROR_IN_PROGRESS if the channel is reopened.

    Returns nsIInputStream

  • Resumes the current request. This may have the effect of re-opening any underlying transport and will resume the delivery of data to any open streams.

    Returns void

  • Parameters

    • mode: nsIRequest_TRRMode

    Returns void

  • Suspends the current request. This may have the effect of closing any underlying transport (in order to free up resources), although any open streams remain logically opened and will continue delivering data when the transport is resumed.

    Calling cancel() on a suspended request must not send any notifications (such as onstopRequest) until the request is resumed.

    NOTE: some implementations are unable to immediately suspend, and may continue to deliver events already posted to an event queue. In general, callers should be capable of handling events even after suspending a request.

    Returns void

Generated using TypeDoc