NS_IMETHODIMP nsBaseChannel::Open(nsIInputStream **result) { NS_ENSURE_TRUE(mURI, NS_ERROR_NOT_INITIALIZED); NS_ENSURE_TRUE(!mPump, NS_ERROR_IN_PROGRESS); NS_ENSURE_TRUE(!mWasOpened, NS_ERROR_IN_PROGRESS); nsCOMPtr<nsIChannel> chan; nsresult rv = OpenContentStream(false, result, getter_AddRefs(chan)); NS_ASSERTION(!chan || !*result, "Got both a channel and a stream?"); if (NS_SUCCEEDED(rv) && chan) { rv = Redirect(chan, nsIChannelEventSink::REDIRECT_INTERNAL, false); if (NS_FAILED(rv)) return rv; rv = chan->Open(result); } else if (rv == NS_ERROR_NOT_IMPLEMENTED) return NS_ImplementChannelOpen(this, result); if (NS_SUCCEEDED(rv)) { mWasOpened = true; ClassifyURI(); } return rv; }
nsresult nsBaseChannel::BeginPumpingData() { nsCOMPtr<nsIInputStream> stream; nsCOMPtr<nsIChannel> channel; nsresult rv = OpenContentStream(true, getter_AddRefs(stream), getter_AddRefs(channel)); if (NS_FAILED(rv)) return rv; NS_ASSERTION(!stream || !channel, "Got both a channel and a stream?"); if (channel) { rv = NS_DispatchToCurrentThread(new RedirectRunnable(this, channel)); if (NS_SUCCEEDED(rv)) mWaitingOnAsyncRedirect = true; return rv; } // By assigning mPump, we flag this channel as pending (see IsPending). It's // important that the pending flag is set when we call into the stream (the // call to AsyncRead results in the stream's AsyncWait method being called) // and especially when we call into the loadgroup. Our caller takes care to // release mPump if we return an error. rv = nsInputStreamPump::Create(getter_AddRefs(mPump), stream, -1, -1, 0, 0, true); if (NS_SUCCEEDED(rv)) rv = mPump->AsyncRead(this, nullptr); return rv; }
nsresult nsNDNChannel::BeginPumpingData() { nsresult rv; nsCOMPtr<nsIInputStream> stream; nsCOMPtr<nsIChannel> channel; rv = OpenContentStream(true, getter_AddRefs(stream), getter_AddRefs(channel)); if (NS_FAILED(rv)) return rv; NS_ASSERTION(!stream || !channel, "Got both a channel and a stream?"); /* if (channel) { rv = NS_DispatchToCurrentThread(new RedirectRunnable(this, channel)); if (NS_SUCCEEDED(rv)) mWaitingOnAsyncRedirect = true; return rv; } */ rv = NS_NewInputStreamPump(getter_AddRefs(mPump), stream, -1, -1, 0, 0, true); if (NS_SUCCEEDED(rv)) rv = mPump->AsyncRead(this, nsnull); return rv; }
NS_IMETHODIMP nsBaseChannel::Open(nsIInputStream **result) { NS_ENSURE_TRUE(mURI, NS_ERROR_NOT_INITIALIZED); NS_ENSURE_TRUE(!mPump, NS_ERROR_IN_PROGRESS); NS_ENSURE_TRUE(!mWasOpened, NS_ERROR_IN_PROGRESS); nsresult rv = OpenContentStream(PR_FALSE, result); if (rv == NS_ERROR_NOT_IMPLEMENTED) return NS_ImplementChannelOpen(this, result); mWasOpened = NS_SUCCEEDED(rv); return rv; }
nsresult nsBaseChannel::BeginPumpingData() { nsCOMPtr<nsIInputStream> stream; nsresult rv = OpenContentStream(PR_TRUE, getter_AddRefs(stream)); if (NS_FAILED(rv)) return rv; // By assigning mPump, we flag this channel as pending (see IsPending). It's // important that the pending flag is set when we call into the stream (the // call to AsyncRead results in the stream's AsyncWait method being called) // and especially when we call into the loadgroup. Our caller takes care to // release mPump if we return an error. rv = nsInputStreamPump::Create(getter_AddRefs(mPump), stream, -1, -1, 0, 0, PR_TRUE); if (NS_SUCCEEDED(rv)) rv = mPump->AsyncRead(this, nsnull); return rv; }