xpcom/io/nsIAsyncInputStream.idl

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

michael@0 1 /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0 2 * License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 4
michael@0 5 #include "nsIInputStream.idl"
michael@0 6
michael@0 7 interface nsIInputStreamCallback;
michael@0 8 interface nsIEventTarget;
michael@0 9
michael@0 10 /**
michael@0 11 * If an input stream is non-blocking, it may return NS_BASE_STREAM_WOULD_BLOCK
michael@0 12 * when read. The caller must then wait for the stream to have some data to
michael@0 13 * read. If the stream implements nsIAsyncInputStream, then the caller can use
michael@0 14 * this interface to request an asynchronous notification when the stream
michael@0 15 * becomes readable or closed (via the AsyncWait method).
michael@0 16 *
michael@0 17 * While this interface is almost exclusively used with non-blocking streams, it
michael@0 18 * is not necessary that nsIInputStream::isNonBlocking return true. Nor is it
michael@0 19 * necessary that a non-blocking nsIInputStream implementation also implement
michael@0 20 * nsIAsyncInputStream.
michael@0 21 */
michael@0 22 [scriptable, uuid(a5f255ab-4801-4161-8816-277ac92f6ad1)]
michael@0 23 interface nsIAsyncInputStream : nsIInputStream
michael@0 24 {
michael@0 25 /**
michael@0 26 * This method closes the stream and sets its internal status. If the
michael@0 27 * stream is already closed, then this method is ignored. Once the stream
michael@0 28 * is closed, the stream's status cannot be changed. Any successful status
michael@0 29 * code passed to this method is treated as NS_BASE_STREAM_CLOSED, which
michael@0 30 * has an effect equivalent to nsIInputStream::close.
michael@0 31 *
michael@0 32 * NOTE: this method exists in part to support pipes, which have both an
michael@0 33 * input end and an output end. If the input end of a pipe is closed, then
michael@0 34 * writes to the output end of the pipe will fail. The error code returned
michael@0 35 * when an attempt is made to write to a "broken" pipe corresponds to the
michael@0 36 * status code passed in when the input end of the pipe was closed, which
michael@0 37 * greatly simplifies working with pipes in some cases.
michael@0 38 *
michael@0 39 * @param aStatus
michael@0 40 * The error that will be reported if this stream is accessed after
michael@0 41 * it has been closed.
michael@0 42 */
michael@0 43 void closeWithStatus(in nsresult aStatus);
michael@0 44
michael@0 45 /**
michael@0 46 * Asynchronously wait for the stream to be readable or closed. The
michael@0 47 * notification is one-shot, meaning that each asyncWait call will result
michael@0 48 * in exactly one notification callback. After the OnInputStreamReady event
michael@0 49 * is dispatched, the stream releases its reference to the
michael@0 50 * nsIInputStreamCallback object. It is safe to call asyncWait again from the
michael@0 51 * notification handler.
michael@0 52 *
michael@0 53 * This method may be called at any time (even if read has not been called).
michael@0 54 * In other words, this method may be called when the stream already has
michael@0 55 * data to read. It may also be called when the stream is closed. If the
michael@0 56 * stream is already readable or closed when AsyncWait is called, then the
michael@0 57 * OnInputStreamReady event will be dispatched immediately. Otherwise, the
michael@0 58 * event will be dispatched when the stream becomes readable or closed.
michael@0 59 *
michael@0 60 * @param aCallback
michael@0 61 * This object is notified when the stream becomes ready. This
michael@0 62 * parameter may be null to clear an existing callback.
michael@0 63 * @param aFlags
michael@0 64 * This parameter specifies optional flags passed in to configure
michael@0 65 * the behavior of this method. Pass zero to specify no flags.
michael@0 66 * @param aRequestedCount
michael@0 67 * Wait until at least this many bytes can be read. This is only
michael@0 68 * a suggestion to the underlying stream; it may be ignored. The
michael@0 69 * caller may pass zero to indicate no preference.
michael@0 70 * @param aEventTarget
michael@0 71 * Specify NULL to receive notification on ANY thread (possibly even
michael@0 72 * recursively on the calling thread -- i.e., synchronously), or
michael@0 73 * specify that the notification be delivered to a specific event
michael@0 74 * target.
michael@0 75 */
michael@0 76 void asyncWait(in nsIInputStreamCallback aCallback,
michael@0 77 in unsigned long aFlags,
michael@0 78 in unsigned long aRequestedCount,
michael@0 79 in nsIEventTarget aEventTarget);
michael@0 80
michael@0 81 /**
michael@0 82 * If passed to asyncWait, this flag overrides the default behavior,
michael@0 83 * causing the OnInputStreamReady notification to be suppressed until the
michael@0 84 * stream becomes closed (either as a result of closeWithStatus/close being
michael@0 85 * called on the stream or possibly due to some error in the underlying
michael@0 86 * stream).
michael@0 87 */
michael@0 88 const unsigned long WAIT_CLOSURE_ONLY = (1<<0);
michael@0 89 };
michael@0 90
michael@0 91 /**
michael@0 92 * This is a companion interface for nsIAsyncInputStream::asyncWait.
michael@0 93 */
michael@0 94 [function, scriptable, uuid(d1f28e94-3a6e-4050-a5f5-2e81b1fc2a43)]
michael@0 95 interface nsIInputStreamCallback : nsISupports
michael@0 96 {
michael@0 97 /**
michael@0 98 * Called to indicate that the stream is either readable or closed.
michael@0 99 *
michael@0 100 * @param aStream
michael@0 101 * The stream whose asyncWait method was called.
michael@0 102 */
michael@0 103 void onInputStreamReady(in nsIAsyncInputStream aStream);
michael@0 104 };

mercurial