diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /netwerk/base/nsInputStreamPump.h | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'netwerk/base/nsInputStreamPump.h')
-rw-r--r-- | netwerk/base/nsInputStreamPump.h | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/netwerk/base/nsInputStreamPump.h b/netwerk/base/nsInputStreamPump.h new file mode 100644 index 000000000..c9b7bd64c --- /dev/null +++ b/netwerk/base/nsInputStreamPump.h @@ -0,0 +1,105 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef nsInputStreamPump_h__ +#define nsInputStreamPump_h__ + +#include "nsIInputStreamPump.h" +#include "nsIAsyncInputStream.h" +#include "nsIThreadRetargetableRequest.h" +#include "nsCOMPtr.h" +#include "mozilla/Attributes.h" +#include "mozilla/ReentrantMonitor.h" + +class nsIInputStream; +class nsILoadGroup; +class nsIStreamListener; + +class nsInputStreamPump final : public nsIInputStreamPump + , public nsIInputStreamCallback + , public nsIThreadRetargetableRequest +{ + ~nsInputStreamPump(); + +public: + typedef mozilla::ReentrantMonitorAutoEnter ReentrantMonitorAutoEnter; + NS_DECL_THREADSAFE_ISUPPORTS + NS_DECL_NSIREQUEST + NS_DECL_NSIINPUTSTREAMPUMP + NS_DECL_NSIINPUTSTREAMCALLBACK + NS_DECL_NSITHREADRETARGETABLEREQUEST + + nsInputStreamPump(); + + static nsresult + Create(nsInputStreamPump **result, + nsIInputStream *stream, + int64_t streamPos = -1, + int64_t streamLen = -1, + uint32_t segsize = 0, + uint32_t segcount = 0, + bool closeWhenDone = false); + + typedef void (*PeekSegmentFun)(void *closure, const uint8_t *buf, + uint32_t bufLen); + /** + * Peek into the first chunk of data that's in the stream. Note that this + * method will not call the callback when there is no data in the stream. + * The callback will be called at most once. + * + * The data from the stream will not be consumed, i.e. the pump's listener + * can still read all the data. + * + * Do not call before asyncRead. Do not call after onStopRequest. + */ + nsresult PeekStream(PeekSegmentFun callback, void *closure); + + /** + * Dispatched (to the main thread) by OnStateStop if it's called off main + * thread. Updates mState based on return value of OnStateStop. + */ + nsresult CallOnStateStop(); + +protected: + + enum { + STATE_IDLE, + STATE_START, + STATE_TRANSFER, + STATE_STOP + }; + + nsresult EnsureWaiting(); + uint32_t OnStateStart(); + uint32_t OnStateTransfer(); + uint32_t OnStateStop(); + + uint32_t mState; + nsCOMPtr<nsILoadGroup> mLoadGroup; + nsCOMPtr<nsIStreamListener> mListener; + nsCOMPtr<nsISupports> mListenerContext; + nsCOMPtr<nsIEventTarget> mTargetThread; + nsCOMPtr<nsIInputStream> mStream; + nsCOMPtr<nsIAsyncInputStream> mAsyncStream; + uint64_t mStreamOffset; + uint64_t mStreamLength; + uint32_t mSegSize; + uint32_t mSegCount; + nsresult mStatus; + uint32_t mSuspendCount; + uint32_t mLoadFlags; + bool mIsPending; + // True while in OnInputStreamReady, calling OnStateStart, OnStateTransfer + // and OnStateStop. Used to prevent calls to AsyncWait during callbacks. + bool mProcessingCallbacks; + // True if waiting on the "input stream ready" callback. + bool mWaitingForInputStreamReady; + bool mCloseWhenDone; + bool mRetargeting; + // Protects state/member var accesses across multiple threads. + mozilla::ReentrantMonitor mMonitor; +}; + +#endif // !nsInputStreamChannel_h__ |