nsInputStreamChannel.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. #include "nsInputStreamChannel.h"
  6. //-----------------------------------------------------------------------------
  7. // nsInputStreamChannel
  8. namespace mozilla {
  9. namespace net {
  10. nsresult
  11. nsInputStreamChannel::OpenContentStream(bool async, nsIInputStream **result,
  12. nsIChannel** channel)
  13. {
  14. NS_ENSURE_TRUE(mContentStream, NS_ERROR_NOT_INITIALIZED);
  15. // If content length is unknown, then we must guess. In this case, we assume
  16. // the stream can tell us. If the stream is a pipe, then this will not work.
  17. if (mContentLength < 0) {
  18. uint64_t avail;
  19. nsresult rv = mContentStream->Available(&avail);
  20. if (rv == NS_BASE_STREAM_CLOSED) {
  21. // This just means there's nothing in the stream
  22. avail = 0;
  23. } else if (NS_FAILED(rv)) {
  24. return rv;
  25. }
  26. mContentLength = avail;
  27. }
  28. EnableSynthesizedProgressEvents(true);
  29. NS_ADDREF(*result = mContentStream);
  30. return NS_OK;
  31. }
  32. //-----------------------------------------------------------------------------
  33. // nsInputStreamChannel::nsISupports
  34. NS_IMPL_ISUPPORTS_INHERITED(nsInputStreamChannel,
  35. nsBaseChannel,
  36. nsIInputStreamChannel)
  37. //-----------------------------------------------------------------------------
  38. // nsInputStreamChannel::nsIInputStreamChannel
  39. NS_IMETHODIMP
  40. nsInputStreamChannel::SetURI(nsIURI *uri)
  41. {
  42. NS_ENSURE_TRUE(!URI(), NS_ERROR_ALREADY_INITIALIZED);
  43. nsBaseChannel::SetURI(uri);
  44. return NS_OK;
  45. }
  46. NS_IMETHODIMP
  47. nsInputStreamChannel::GetContentStream(nsIInputStream **stream)
  48. {
  49. NS_IF_ADDREF(*stream = mContentStream);
  50. return NS_OK;
  51. }
  52. NS_IMETHODIMP
  53. nsInputStreamChannel::SetContentStream(nsIInputStream *stream)
  54. {
  55. NS_ENSURE_TRUE(!mContentStream, NS_ERROR_ALREADY_INITIALIZED);
  56. mContentStream = stream;
  57. return NS_OK;
  58. }
  59. NS_IMETHODIMP
  60. nsInputStreamChannel::GetSrcdocData(nsAString& aSrcdocData)
  61. {
  62. aSrcdocData = mSrcdocData;
  63. return NS_OK;
  64. }
  65. NS_IMETHODIMP
  66. nsInputStreamChannel::SetSrcdocData(const nsAString& aSrcdocData)
  67. {
  68. mSrcdocData = aSrcdocData;
  69. mIsSrcdocChannel = true;
  70. return NS_OK;
  71. }
  72. NS_IMETHODIMP
  73. nsInputStreamChannel::GetIsSrcdocChannel(bool *aIsSrcdocChannel)
  74. {
  75. *aIsSrcdocChannel = mIsSrcdocChannel;
  76. return NS_OK;
  77. }
  78. NS_IMETHODIMP
  79. nsInputStreamChannel::GetBaseURI(nsIURI** aBaseURI)
  80. {
  81. *aBaseURI = mBaseURI;
  82. NS_IF_ADDREF(*aBaseURI);
  83. return NS_OK;
  84. }
  85. NS_IMETHODIMP
  86. nsInputStreamChannel::SetBaseURI(nsIURI* aBaseURI)
  87. {
  88. mBaseURI = aBaseURI;
  89. return NS_OK;
  90. }
  91. } // namespace net
  92. } // namespace mozilla