forked from mirrors/gecko-dev
		
	 3f2298c2f6
			
		
	
	
		3f2298c2f6
		
	
	
	
	
		
			
			MozReview-Commit-ID: 666LNaHyiuQ --HG-- extra : rebase_source : f3a24e0342d8dcdf9020dd473bc6b1045cbc533b
		
			
				
	
	
		
			65 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | |
| /* 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 mozilla_net_MemoryDownloader_h__
 | |
| #define mozilla_net_MemoryDownloader_h__
 | |
| 
 | |
| #include "mozilla/UniquePtr.h"
 | |
| #include "nsCOMPtr.h"
 | |
| #include "nsIStreamListener.h"
 | |
| #include "nsTArray.h"
 | |
| 
 | |
| /**
 | |
|  * mozilla::net::MemoryDownloader
 | |
|  *
 | |
|  * This class is similar to nsIDownloader, but stores the downloaded
 | |
|  * stream in memory instead of a file.  Ownership of the temporary
 | |
|  * memory is transferred to the observer when download is complete;
 | |
|  * there is no need to retain a reference to the downloader.
 | |
|  */
 | |
| 
 | |
| namespace mozilla {
 | |
| namespace net {
 | |
| 
 | |
| class MemoryDownloader final : public nsIStreamListener
 | |
| {
 | |
| public:
 | |
|   NS_DECL_ISUPPORTS
 | |
|   NS_DECL_NSIREQUESTOBSERVER
 | |
|   NS_DECL_NSISTREAMLISTENER
 | |
| 
 | |
|   typedef mozilla::UniquePtr<FallibleTArray<uint8_t>> Data;
 | |
| 
 | |
|   class IObserver : public nsISupports {
 | |
|   public:
 | |
|     // Note: aData may be null if (and only if) aStatus indicates failure.
 | |
|     virtual void OnDownloadComplete(MemoryDownloader* aDownloader,
 | |
|                                     nsIRequest* aRequest,
 | |
|                                     nsISupports* aCtxt,
 | |
|                                     nsresult aStatus,
 | |
|                                     Data aData) = 0;
 | |
|   };
 | |
| 
 | |
|   explicit MemoryDownloader(IObserver* aObserver);
 | |
| 
 | |
| private:
 | |
|   virtual ~MemoryDownloader() = default;
 | |
| 
 | |
|   static nsresult ConsumeData(nsIInputStream *in,
 | |
|                               void           *closure,
 | |
|                               const char     *fromRawSegment,
 | |
|                               uint32_t        toOffset,
 | |
|                               uint32_t        count,
 | |
|                               uint32_t       *writeCount);
 | |
| 
 | |
|   RefPtr<IObserver> mObserver;
 | |
|   Data mData;
 | |
|   nsresult mStatus;
 | |
| };
 | |
| 
 | |
| } // namespace net
 | |
| } // namespace mozilla
 | |
| 
 | |
| #endif // mozilla_net_MemoryDownloader_h__
 |