forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			101 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; tab-width: 2; 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/. */
 | |
| 
 | |
| #include "nsInputStreamChannel.h"
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| // nsInputStreamChannel
 | |
| 
 | |
| namespace mozilla {
 | |
| namespace net {
 | |
| 
 | |
| nsresult nsInputStreamChannel::OpenContentStream(bool async,
 | |
|                                                  nsIInputStream** result,
 | |
|                                                  nsIChannel** channel) {
 | |
|   NS_ENSURE_TRUE(mContentStream, NS_ERROR_NOT_INITIALIZED);
 | |
| 
 | |
|   // If content length is unknown, then we must guess.  In this case, we assume
 | |
|   // the stream can tell us.  If the stream is a pipe, then this will not work.
 | |
| 
 | |
|   if (mContentLength < 0) {
 | |
|     uint64_t avail;
 | |
|     nsresult rv = mContentStream->Available(&avail);
 | |
|     if (rv == NS_BASE_STREAM_CLOSED) {
 | |
|       // This just means there's nothing in the stream
 | |
|       avail = 0;
 | |
|     } else if (NS_FAILED(rv)) {
 | |
|       return rv;
 | |
|     }
 | |
|     mContentLength = avail;
 | |
|   }
 | |
| 
 | |
|   EnableSynthesizedProgressEvents(true);
 | |
| 
 | |
|   *result = do_AddRef(mContentStream).take();
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| // nsInputStreamChannel::nsISupports
 | |
| 
 | |
| NS_IMPL_ISUPPORTS_INHERITED(nsInputStreamChannel, nsBaseChannel,
 | |
|                             nsIInputStreamChannel)
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| // nsInputStreamChannel::nsIInputStreamChannel
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| nsInputStreamChannel::SetURI(nsIURI* uri) {
 | |
|   NS_ENSURE_TRUE(!URI(), NS_ERROR_ALREADY_INITIALIZED);
 | |
|   nsBaseChannel::SetURI(uri);
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| nsInputStreamChannel::GetContentStream(nsIInputStream** stream) {
 | |
|   *stream = do_AddRef(mContentStream).take();
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| nsInputStreamChannel::SetContentStream(nsIInputStream* stream) {
 | |
|   NS_ENSURE_TRUE(!mContentStream, NS_ERROR_ALREADY_INITIALIZED);
 | |
|   mContentStream = stream;
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| nsInputStreamChannel::GetSrcdocData(nsAString& aSrcdocData) {
 | |
|   aSrcdocData = mSrcdocData;
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| nsInputStreamChannel::SetSrcdocData(const nsAString& aSrcdocData) {
 | |
|   mSrcdocData = aSrcdocData;
 | |
|   mIsSrcdocChannel = true;
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| nsInputStreamChannel::GetIsSrcdocChannel(bool* aIsSrcdocChannel) {
 | |
|   *aIsSrcdocChannel = mIsSrcdocChannel;
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| nsInputStreamChannel::GetBaseURI(nsIURI** aBaseURI) {
 | |
|   *aBaseURI = do_AddRef(mBaseURI).take();
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| nsInputStreamChannel::SetBaseURI(nsIURI* aBaseURI) {
 | |
|   mBaseURI = aBaseURI;
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| }  // namespace net
 | |
| }  // namespace mozilla
 | 
