void nsNPAPIPluginStreamListener::SuspendRequest() { NS_ASSERTION(!mIsSuspended, "Suspending a request that's already suspended!"); nsresult rv = StartDataPump(); if (NS_FAILED(rv)) return; mIsSuspended = true; if (mStreamListenerPeer) { mStreamListenerPeer->SuspendRequests(); } }
nsresult nsNPAPIPluginStreamListener::OnStopBinding(nsPluginStreamListenerPeer* streamPeer, nsresult status) { if (NS_FAILED(status)) { // The stream was destroyed, or died for some reason. Make sure we // cancel the underlying request. if (mStreamListenerPeer) { mStreamListenerPeer->CancelRequests(status); } } if (!mInst || !mInst->CanFireNotifications()) { StopDataPump(); return NS_ERROR_FAILURE; } // We need to detect that the stop is due to async stream init completion. if (mStreamStopMode == eDoDeferredStop) { // We shouldn't be delivering this until async init is done mStreamStopMode = eStopPending; mPendingStopBindingStatus = status; if (!mDataPumpTimer) { StartDataPump(); } return NS_OK; } StopDataPump(); NPReason reason = NS_FAILED(status) ? NPRES_NETWORK_ERR : NPRES_DONE; if (mRedirectDenied || status == NS_BINDING_ABORTED) { reason = NPRES_USER_BREAK; } // The following code can result in the deletion of 'this'. Don't // assume we are alive after this! return CleanUpStream(reason); }