| /* ***** 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. |
| * |
| * The Initial Developer of the Original Code is |
| * Netscape Communications Corporation. |
| * Portions created by the Initial Developer are Copyright (C) 2002 |
| * the Initial Developer. All Rights Reserved. |
| * |
| * Contributor(s): |
| * Darin Fisher <darin@netscape.com> |
| * |
| * 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 "nsIOutputStream.idl" |
| |
| interface nsIOutputStreamCallback; |
| interface nsIEventTarget; |
| |
| /** |
| * If an output stream is non-blocking, it may return NS_BASE_STREAM_WOULD_BLOCK |
| * when written to. The caller must then wait for the stream to become |
| * writable. If the stream implements nsIAsyncOutputStream, then the caller can |
| * use this interface to request an asynchronous notification when the stream |
| * becomes writable or closed (via the AsyncWait method). |
| * |
| * While this interface is almost exclusively used with non-blocking streams, it |
| * is not necessary that nsIOutputStream::isNonBlocking return true. Nor is it |
| * necessary that a non-blocking nsIOutputStream implementation also implement |
| * nsIAsyncOutputStream. |
| */ |
| [scriptable, uuid(beb632d3-d77a-4e90-9134-f9ece69e8200)] |
| interface nsIAsyncOutputStream : nsIOutputStream |
| { |
| /** |
| * This method closes the stream and sets its internal status. If the |
| * stream is already closed, then this method is ignored. Once the stream |
| * is closed, the stream's status cannot be changed. Any successful status |
| * code passed to this method is treated as NS_BASE_STREAM_CLOSED, which |
| * is equivalent to nsIInputStream::close. |
| * |
| * NOTE: this method exists in part to support pipes, which have both an |
| * input end and an output end. If the output end of a pipe is closed, then |
| * reads from the input end of the pipe will fail. The error code returned |
| * when an attempt is made to read from a "closed" pipe corresponds to the |
| * status code passed in when the output end of the pipe is closed, which |
| * greatly simplifies working with pipes in some cases. |
| * |
| * @param aStatus |
| * The error that will be reported if this stream is accessed after |
| * it has been closed. |
| */ |
| void closeWithStatus(in nsresult reason); |
| |
| /** |
| * Asynchronously wait for the stream to be writable or closed. The |
| * notification is one-shot, meaning that each asyncWait call will result |
| * in exactly one notification callback. After the OnOutputStreamReady event |
| * is dispatched, the stream releases its reference to the |
| * nsIOutputStreamCallback object. It is safe to call asyncWait again from the |
| * notification handler. |
| * |
| * This method may be called at any time (even if write has not been called). |
| * In other words, this method may be called when the stream already has |
| * room for more data. It may also be called when the stream is closed. If |
| * the stream is already writable or closed when AsyncWait is called, then the |
| * OnOutputStreamReady event will be dispatched immediately. Otherwise, the |
| * event will be dispatched when the stream becomes writable or closed. |
| * |
| * @param aCallback |
| * This object is notified when the stream becomes ready. This |
| * parameter may be null to clear an existing callback. |
| * @param aFlags |
| * This parameter specifies optional flags passed in to configure |
| * the behavior of this method. Pass zero to specify no flags. |
| * @param aRequestedCount |
| * Wait until at least this many bytes can be written. This is only |
| * a suggestion to the underlying stream; it may be ignored. The |
| * caller may pass zero to indicate no preference. |
| * @param aEventTarget |
| * Specify NULL to receive notification on ANY thread (possibly even |
| * recursively on the calling thread -- i.e., synchronously), or |
| * specify that the notification be delivered to a specific event |
| * target. |
| */ |
| void asyncWait(in nsIOutputStreamCallback aCallback, |
| in unsigned long aFlags, |
| in unsigned long aRequestedCount, |
| in nsIEventTarget aEventTarget); |
| |
| /** |
| * If passed to asyncWait, this flag overrides the default behavior, |
| * causing the OnOutputStreamReady notification to be suppressed until the |
| * stream becomes closed (either as a result of closeWithStatus/close being |
| * called on the stream or possibly due to some error in the underlying |
| * stream). |
| */ |
| const unsigned long WAIT_CLOSURE_ONLY = (1<<0); |
| }; |
| |
| /** |
| * This is a companion interface for nsIAsyncOutputStream::asyncWait. |
| */ |
| [scriptable, uuid(40dbcdff-9053-42c5-a57c-3ec910d0f148)] |
| interface nsIOutputStreamCallback : nsISupports |
| { |
| /** |
| * Called to indicate that the stream is either writable or closed. |
| * |
| * @param aStream |
| * The stream whose asyncWait method was called. |
| */ |
| void onOutputStreamReady(in nsIAsyncOutputStream aStream); |
| }; |