forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* 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__
 | 
