NS_IMETHODIMP nsBaseChannel::OnStopRequest(nsIRequest *request, nsISupports *ctxt, nsresult status) { // If both mStatus and status are failure codes, we keep mStatus as-is since // that is consistent with our GetStatus and Cancel methods. if (NS_SUCCEEDED(mStatus)) mStatus = status; // Cause IsPending to return false. mPump = nullptr; if (mListener) // null in case of redirect mListener->OnStopRequest(this, mListenerContext, mStatus); ChannelDone(); // No need to suspend pump in this scope since we will not be receiving // any more events from it. if (mLoadGroup) mLoadGroup->RemoveRequest(this, nullptr, mStatus); // Drop notification callbacks to prevent cycles. mCallbacks = nullptr; CallbacksChanged(); return NS_OK; }
NS_IMETHODIMP nsBaseChannel::SetNotificationCallbacks(nsIInterfaceRequestor *aCallbacks) { mCallbacks = aCallbacks; CallbacksChanged(); return NS_OK; }
NS_IMETHODIMP nsBaseChannel::SetLoadGroup(nsILoadGroup *aLoadGroup) { mLoadGroup = aLoadGroup; CallbacksChanged(); return NS_OK; }
NS_IMETHODIMP nsBaseChannel::SetNotificationCallbacks(nsIInterfaceRequestor *aCallbacks) { if (!CanSetCallbacks(aCallbacks)) { return NS_ERROR_FAILURE; } mCallbacks = aCallbacks; CallbacksChanged(); return NS_OK; }
NS_IMETHODIMP nsBaseChannel::SetLoadGroup(nsILoadGroup *aLoadGroup) { if (!CanSetLoadGroup(aLoadGroup)) { return NS_ERROR_FAILURE; } mLoadGroup = aLoadGroup; CallbacksChanged(); return NS_OK; }
void nsBaseChannel::ContinueHandleAsyncRedirect(nsresult result) { mWaitingOnAsyncRedirect = false; if (NS_FAILED(result)) Cancel(result); if (NS_FAILED(result) && mListener) { // Notify our consumer ourselves mListener->OnStartRequest(this, mListenerContext); mListener->OnStopRequest(this, mListenerContext, mStatus); ChannelDone(); } if (mLoadGroup) mLoadGroup->RemoveRequest(this, nullptr, mStatus); // Drop notification callbacks to prevent cycles. mCallbacks = nullptr; CallbacksChanged(); }