123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /* 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 nsAsyncStreamCopier_h__
- #define nsAsyncStreamCopier_h__
- #include "nsIAsyncStreamCopier.h"
- #include "nsIAsyncStreamCopier2.h"
- #include "mozilla/Mutex.h"
- #include "nsStreamUtils.h"
- #include "nsCOMPtr.h"
- class nsIRequestObserver;
- //-----------------------------------------------------------------------------
- class nsAsyncStreamCopier final : public nsIAsyncStreamCopier,
- nsIAsyncStreamCopier2
- {
- public:
- NS_DECL_THREADSAFE_ISUPPORTS
- NS_DECL_NSIREQUEST
- NS_DECL_NSIASYNCSTREAMCOPIER
- // nsIAsyncStreamCopier2
- // We declare it by hand instead of NS_DECL_NSIASYNCSTREAMCOPIER2
- // as nsIAsyncStreamCopier2 duplicates methods of nsIAsyncStreamCopier
- NS_IMETHOD Init(nsIInputStream *aSource,
- nsIOutputStream *aSink,
- nsIEventTarget *aTarget,
- uint32_t aChunkSize,
- bool aCloseSource,
- bool aCloseSink) override;
- nsAsyncStreamCopier();
- //-------------------------------------------------------------------------
- // these methods may be called on any thread
- bool IsComplete(nsresult *status = nullptr);
- void Complete(nsresult status);
- private:
- virtual ~nsAsyncStreamCopier();
- nsresult InitInternal(nsIInputStream *source,
- nsIOutputStream *sink,
- nsIEventTarget *target,
- uint32_t chunkSize,
- bool closeSource,
- bool closeSink);
- static void OnAsyncCopyComplete(void *, nsresult);
- void AsyncCopyInternal();
- nsresult ApplyBufferingPolicy();
- nsIRequest* AsRequest();
- nsCOMPtr<nsIInputStream> mSource;
- nsCOMPtr<nsIOutputStream> mSink;
- nsCOMPtr<nsIRequestObserver> mObserver;
- nsCOMPtr<nsIEventTarget> mTarget;
- nsCOMPtr<nsISupports> mCopierCtx;
- mozilla::Mutex mLock;
- nsAsyncCopyMode mMode;
- uint32_t mChunkSize;
- nsresult mStatus;
- bool mIsPending;
- bool mCloseSource;
- bool mCloseSink;
- bool mShouldSniffBuffering;
- friend class ProceedWithAsyncCopy;
- friend class AsyncApplyBufferingPolicyEvent;
- };
- #endif // !nsAsyncStreamCopier_h__
|