Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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/. */
6 #include "nsInputStreamChannel.h"
8 //-----------------------------------------------------------------------------
9 // nsInputStreamChannel
11 nsresult
12 nsInputStreamChannel::OpenContentStream(bool async, nsIInputStream **result,
13 nsIChannel** channel)
14 {
15 NS_ENSURE_TRUE(mContentStream, NS_ERROR_NOT_INITIALIZED);
17 // If content length is unknown, then we must guess. In this case, we assume
18 // the stream can tell us. If the stream is a pipe, then this will not work.
20 if (mContentLength < 0) {
21 uint64_t avail;
22 nsresult rv = mContentStream->Available(&avail);
23 if (rv == NS_BASE_STREAM_CLOSED) {
24 // This just means there's nothing in the stream
25 avail = 0;
26 } else if (NS_FAILED(rv)) {
27 return rv;
28 }
29 mContentLength = avail;
30 }
32 EnableSynthesizedProgressEvents(true);
34 NS_ADDREF(*result = mContentStream);
35 return NS_OK;
36 }
38 //-----------------------------------------------------------------------------
39 // nsInputStreamChannel::nsISupports
41 NS_IMPL_ISUPPORTS_INHERITED(nsInputStreamChannel,
42 nsBaseChannel,
43 nsIInputStreamChannel)
45 //-----------------------------------------------------------------------------
46 // nsInputStreamChannel::nsIInputStreamChannel
48 NS_IMETHODIMP
49 nsInputStreamChannel::SetURI(nsIURI *uri)
50 {
51 NS_ENSURE_TRUE(!URI(), NS_ERROR_ALREADY_INITIALIZED);
52 nsBaseChannel::SetURI(uri);
53 return NS_OK;
54 }
56 NS_IMETHODIMP
57 nsInputStreamChannel::GetContentStream(nsIInputStream **stream)
58 {
59 NS_IF_ADDREF(*stream = mContentStream);
60 return NS_OK;
61 }
63 NS_IMETHODIMP
64 nsInputStreamChannel::SetContentStream(nsIInputStream *stream)
65 {
66 NS_ENSURE_TRUE(!mContentStream, NS_ERROR_ALREADY_INITIALIZED);
67 mContentStream = stream;
68 return NS_OK;
69 }
71 NS_IMETHODIMP
72 nsInputStreamChannel::GetSrcdocData(nsAString& aSrcdocData)
73 {
74 aSrcdocData = mSrcdocData;
75 return NS_OK;
76 }
78 NS_IMETHODIMP
79 nsInputStreamChannel::SetSrcdocData(const nsAString& aSrcdocData)
80 {
81 mSrcdocData = aSrcdocData;
82 mIsSrcdocChannel = true;
83 return NS_OK;
84 }
86 NS_IMETHODIMP
87 nsInputStreamChannel::GetIsSrcdocChannel(bool *aIsSrcdocChannel)
88 {
89 *aIsSrcdocChannel = mIsSrcdocChannel;
90 return NS_OK;
91 }
93 NS_IMETHODIMP
94 nsInputStreamChannel::GetBaseURI(nsIURI** aBaseURI)
95 {
96 *aBaseURI = mBaseURI;
97 NS_IF_ADDREF(*aBaseURI);
98 return NS_OK;
99 }
101 NS_IMETHODIMP
102 nsInputStreamChannel::SetBaseURI(nsIURI* aBaseURI)
103 {
104 mBaseURI = aBaseURI;
105 return NS_OK;
106 }