diff options
Diffstat (limited to 'netwerk/base/nsInputStreamChannel.cpp')
-rw-r--r-- | netwerk/base/nsInputStreamChannel.cpp | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/netwerk/base/nsInputStreamChannel.cpp b/netwerk/base/nsInputStreamChannel.cpp new file mode 100644 index 0000000000..53e003948b --- /dev/null +++ b/netwerk/base/nsInputStreamChannel.cpp @@ -0,0 +1,102 @@ +/* -*- 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) { + NS_IF_ADDREF(*stream = mContentStream); + 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 = mBaseURI; + NS_IF_ADDREF(*aBaseURI); + return NS_OK; +} + +NS_IMETHODIMP +nsInputStreamChannel::SetBaseURI(nsIURI* aBaseURI) { + mBaseURI = aBaseURI; + return NS_OK; +} + +} // namespace net +} // namespace mozilla |