|
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/. */ |
|
5 |
|
6 #include "nsInputStreamChannel.h" |
|
7 |
|
8 //----------------------------------------------------------------------------- |
|
9 // nsInputStreamChannel |
|
10 |
|
11 nsresult |
|
12 nsInputStreamChannel::OpenContentStream(bool async, nsIInputStream **result, |
|
13 nsIChannel** channel) |
|
14 { |
|
15 NS_ENSURE_TRUE(mContentStream, NS_ERROR_NOT_INITIALIZED); |
|
16 |
|
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. |
|
19 |
|
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 } |
|
31 |
|
32 EnableSynthesizedProgressEvents(true); |
|
33 |
|
34 NS_ADDREF(*result = mContentStream); |
|
35 return NS_OK; |
|
36 } |
|
37 |
|
38 //----------------------------------------------------------------------------- |
|
39 // nsInputStreamChannel::nsISupports |
|
40 |
|
41 NS_IMPL_ISUPPORTS_INHERITED(nsInputStreamChannel, |
|
42 nsBaseChannel, |
|
43 nsIInputStreamChannel) |
|
44 |
|
45 //----------------------------------------------------------------------------- |
|
46 // nsInputStreamChannel::nsIInputStreamChannel |
|
47 |
|
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 } |
|
55 |
|
56 NS_IMETHODIMP |
|
57 nsInputStreamChannel::GetContentStream(nsIInputStream **stream) |
|
58 { |
|
59 NS_IF_ADDREF(*stream = mContentStream); |
|
60 return NS_OK; |
|
61 } |
|
62 |
|
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 } |
|
70 |
|
71 NS_IMETHODIMP |
|
72 nsInputStreamChannel::GetSrcdocData(nsAString& aSrcdocData) |
|
73 { |
|
74 aSrcdocData = mSrcdocData; |
|
75 return NS_OK; |
|
76 } |
|
77 |
|
78 NS_IMETHODIMP |
|
79 nsInputStreamChannel::SetSrcdocData(const nsAString& aSrcdocData) |
|
80 { |
|
81 mSrcdocData = aSrcdocData; |
|
82 mIsSrcdocChannel = true; |
|
83 return NS_OK; |
|
84 } |
|
85 |
|
86 NS_IMETHODIMP |
|
87 nsInputStreamChannel::GetIsSrcdocChannel(bool *aIsSrcdocChannel) |
|
88 { |
|
89 *aIsSrcdocChannel = mIsSrcdocChannel; |
|
90 return NS_OK; |
|
91 } |
|
92 |
|
93 NS_IMETHODIMP |
|
94 nsInputStreamChannel::GetBaseURI(nsIURI** aBaseURI) |
|
95 { |
|
96 *aBaseURI = mBaseURI; |
|
97 NS_IF_ADDREF(*aBaseURI); |
|
98 return NS_OK; |
|
99 } |
|
100 |
|
101 NS_IMETHODIMP |
|
102 nsInputStreamChannel::SetBaseURI(nsIURI* aBaseURI) |
|
103 { |
|
104 mBaseURI = aBaseURI; |
|
105 return NS_OK; |
|
106 } |