nsInputStreamChannel.cpp (2999B)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #include "nsInputStreamChannel.h" 7 8 //----------------------------------------------------------------------------- 9 // nsInputStreamChannel 10 11 namespace mozilla { 12 namespace net { 13 14 nsresult nsInputStreamChannel::OpenContentStream(bool async, 15 nsIInputStream** result, 16 nsIChannel** channel) { 17 NS_ENSURE_TRUE(mContentStream, NS_ERROR_NOT_INITIALIZED); 18 19 // If content length is unknown, then we must guess. In this case, we assume 20 // the stream can tell us. If the stream is a pipe, then this will not work. 21 22 if (mContentLength < 0) { 23 uint64_t avail; 24 nsresult rv = mContentStream->Available(&avail); 25 if (rv == NS_BASE_STREAM_CLOSED) { 26 // This just means there's nothing in the stream 27 avail = 0; 28 } else if (NS_FAILED(rv)) { 29 return rv; 30 } 31 mContentLength = avail; 32 } 33 34 EnableSynthesizedProgressEvents(true); 35 36 *result = do_AddRef(mContentStream).take(); 37 return NS_OK; 38 } 39 40 //----------------------------------------------------------------------------- 41 // nsInputStreamChannel::nsISupports 42 43 NS_IMPL_ISUPPORTS_INHERITED(nsInputStreamChannel, nsBaseChannel, 44 nsIInputStreamChannel) 45 46 //----------------------------------------------------------------------------- 47 // nsInputStreamChannel::nsIInputStreamChannel 48 49 NS_IMETHODIMP 50 nsInputStreamChannel::SetURI(nsIURI* uri) { 51 NS_ENSURE_TRUE(!URI(), NS_ERROR_ALREADY_INITIALIZED); 52 nsBaseChannel::SetURI(uri); 53 return NS_OK; 54 } 55 56 NS_IMETHODIMP 57 nsInputStreamChannel::GetContentStream(nsIInputStream** stream) { 58 *stream = do_AddRef(mContentStream).take(); 59 return NS_OK; 60 } 61 62 NS_IMETHODIMP 63 nsInputStreamChannel::SetContentStream(nsIInputStream* stream) { 64 NS_ENSURE_TRUE(!mContentStream, NS_ERROR_ALREADY_INITIALIZED); 65 mContentStream = stream; 66 return NS_OK; 67 } 68 69 NS_IMETHODIMP 70 nsInputStreamChannel::GetSrcdocData(nsAString& aSrcdocData) { 71 aSrcdocData = mSrcdocData; 72 return NS_OK; 73 } 74 75 NS_IMETHODIMP 76 nsInputStreamChannel::SetSrcdocData(const nsAString& aSrcdocData) { 77 mSrcdocData = aSrcdocData; 78 mIsSrcdocChannel = true; 79 return NS_OK; 80 } 81 82 NS_IMETHODIMP 83 nsInputStreamChannel::GetIsSrcdocChannel(bool* aIsSrcdocChannel) { 84 *aIsSrcdocChannel = mIsSrcdocChannel; 85 return NS_OK; 86 } 87 88 NS_IMETHODIMP 89 nsInputStreamChannel::GetBaseURI(nsIURI** aBaseURI) { 90 *aBaseURI = do_AddRef(mBaseURI).take(); 91 return NS_OK; 92 } 93 94 NS_IMETHODIMP 95 nsInputStreamChannel::SetBaseURI(nsIURI* aBaseURI) { 96 mBaseURI = aBaseURI; 97 return NS_OK; 98 } 99 100 NS_IMETHODIMP 101 nsInputStreamChannel::SetContentType(const nsACString& aContentType) { 102 mContentType = aContentType; 103 return NS_OK; 104 } 105 106 } // namespace net 107 } // namespace mozilla