NS_IMETHODIMP EventSource::OnStopRequest(nsIRequest *aRequest, nsISupports *aContext, nsresult aStatusCode) { mWaitingForOnStopRequest = false; if (mReadyState == CLOSED) { return NS_ERROR_ABORT; } if (NS_FAILED(aStatusCode)) { DispatchFailConnection(); return aStatusCode; } nsresult rv; nsresult healthOfRequestResult = CheckHealthOfRequestCallback(aRequest); if (NS_SUCCEEDED(healthOfRequestResult)) { // check if we had an incomplete UTF8 char at the end of the stream if (mLastConvertionResult == NS_PARTIAL_MORE_INPUT) { rv = ParseCharacter(REPLACEMENT_CHAR); NS_ENSURE_SUCCESS(rv, rv); } // once we reach the end of the stream we must // dispatch the current event switch (mStatus) { case PARSE_STATE_CR_CHAR: case PARSE_STATE_COMMENT: case PARSE_STATE_FIELD_NAME: case PARSE_STATE_FIRST_CHAR_OF_FIELD_VALUE: case PARSE_STATE_FIELD_VALUE: case PARSE_STATE_BEGIN_OF_LINE: rv = SetFieldAndClear(); NS_ENSURE_SUCCESS(rv, rv); rv = DispatchCurrentMessageEvent(); // there is an empty line (CRCR) NS_ENSURE_SUCCESS(rv, rv); break; // Just for not getting warnings when compiling case PARSE_STATE_OFF: case PARSE_STATE_BEGIN_OF_STREAM: case PARSE_STATE_BOM_WAS_READ: break; } } nsCOMPtr<nsIRunnable> event = NS_NewRunnableMethod(this, &EventSource::ReestablishConnection); NS_ENSURE_STATE(event); rv = NS_DispatchToMainThread(event, NS_DISPATCH_NORMAL); NS_ENSURE_SUCCESS(rv, rv); return healthOfRequestResult; }
NS_IMETHODIMP EventSource::OnStopRequest(nsIRequest *aRequest, nsISupports *aContext, nsresult aStatusCode) { mWaitingForOnStopRequest = false; if (mReadyState == CLOSED) { return NS_ERROR_ABORT; } if (NS_FAILED(aStatusCode)) { DispatchFailConnection(); return aStatusCode; } nsresult rv; nsresult healthOfRequestResult = CheckHealthOfRequestCallback(aRequest); if (NS_SUCCEEDED(healthOfRequestResult) && mLastConvertionResult == NS_PARTIAL_MORE_INPUT) { // we had an incomplete UTF8 char at the end of the stream rv = ParseCharacter(REPLACEMENT_CHAR); NS_ENSURE_SUCCESS(rv, rv); } ClearFields(); nsCOMPtr<nsIRunnable> event = NS_NewRunnableMethod(this, &EventSource::ReestablishConnection); NS_ENSURE_STATE(event); rv = NS_DispatchToMainThread(event, NS_DISPATCH_NORMAL); NS_ENSURE_SUCCESS(rv, rv); return healthOfRequestResult; }