From 100b027c626a2071ac64604239e025f916821056 Mon Sep 17 00:00:00 2001 From: "jst%mozilla.jstenback.com" Date: Fri, 5 Nov 2004 06:42:18 +0000 Subject: [PATCH] Fixing bug 267854. Make sure parser data listeners get all the data that comes in from necko, no matter what the current parser context is. r=bzbarsky@mit.edu, sr=brendan@mozilla.org, a=brendan@mozilla.org git-svn-id: svn://10.0.0.236/branches/AVIARY_1_0_20040515_BRANCH@164984 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/htmlparser/src/nsParser.cpp | 10 +++++----- mozilla/htmlparser/src/nsParser.h | 2 +- mozilla/htmlparser/src/nsScanner.cpp | 20 ++++++++++++-------- mozilla/htmlparser/src/nsScanner.h | 13 +++++++++---- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/mozilla/htmlparser/src/nsParser.cpp b/mozilla/htmlparser/src/nsParser.cpp index 3336405c67c..43de064fd95 100644 --- a/mozilla/htmlparser/src/nsParser.cpp +++ b/mozilla/htmlparser/src/nsParser.cpp @@ -1492,12 +1492,12 @@ void nsParser::HandleParserContinueEvent() { ContinueParsing(); } -nsresult nsParser::DataAdded(const nsSubstring& aData) +nsresult nsParser::DataAdded(const nsSubstring& aData, nsIRequest *aRequest) { NS_ASSERTION(sParserDataListeners, "Don't call this with no parser data listeners!"); - if (!mSink || !mParserContext || !mParserContext->mRequest) { + if (!mSink || !aRequest) { return NS_OK; } @@ -1508,10 +1508,10 @@ nsresult nsParser::DataAdded(const nsSubstring& aData) while (count--) { rv |= sParserDataListeners->ObjectAt(count)-> - OnUnicharDataAvailable(mParserContext->mRequest, ctx, aData); + OnUnicharDataAvailable(aRequest, ctx, aData); if (NS_FAILED(rv) && !canceled) { - mParserContext->mRequest->Cancel(rv); + aRequest->Cancel(rv); canceled = PR_TRUE; } @@ -2478,7 +2478,7 @@ ParserWriteFunc(nsIInputStream* in, if(pws->mParserFilter) pws->mParserFilter->RawBuffer(buf, &theNumRead); - result = pws->mScanner->Append(buf, theNumRead); + result = pws->mScanner->Append(buf, theNumRead, pws->mRequest); if (NS_SUCCEEDED(result)) { *writeCount = count; } diff --git a/mozilla/htmlparser/src/nsParser.h b/mozilla/htmlparser/src/nsParser.h index dd08c18a9eb..e0762c3b4e8 100644 --- a/mozilla/htmlparser/src/nsParser.h +++ b/mozilla/htmlparser/src/nsParser.h @@ -387,7 +387,7 @@ class nsParser : public nsIParser, * Called by top-level scanners when data from necko is added to * the scanner. */ - nsresult DataAdded(const nsSubstring& aData); + nsresult DataAdded(const nsSubstring& aData, nsIRequest *aRequest); static nsCOMArray *sParserDataListeners; diff --git a/mozilla/htmlparser/src/nsScanner.cpp b/mozilla/htmlparser/src/nsScanner.cpp index 470281a5398..4b4ce70e74d 100644 --- a/mozilla/htmlparser/src/nsScanner.cpp +++ b/mozilla/htmlparser/src/nsScanner.cpp @@ -339,7 +339,9 @@ nsresult nsScanner::Append(const nsAString& aBuffer) { * @param * @return */ -nsresult nsScanner::Append(const char* aBuffer, PRUint32 aLen){ +nsresult nsScanner::Append(const char* aBuffer, PRUint32 aLen, + nsIRequest *aRequest) +{ nsresult res=NS_OK; PRUnichar *unichars, *start; if(mUnicodeDecoder) { @@ -379,7 +381,7 @@ nsresult nsScanner::Append(const char* aBuffer, PRUint32 aLen){ } while (NS_FAILED(res) && (aLen > 0)); buffer->SetDataLength(totalChars); - AppendToBuffer(buffer); + AppendToBuffer(buffer, aRequest); mTotalRead += totalChars; // Don't propagate return code of unicode decoder @@ -388,7 +390,7 @@ nsresult nsScanner::Append(const char* aBuffer, PRUint32 aLen){ res = NS_OK; } else { - AppendASCIItoBuffer(aBuffer, aLen); + AppendASCIItoBuffer(aBuffer, aLen, aRequest); mTotalRead+=aLen; } @@ -433,7 +435,7 @@ nsresult nsScanner::FillBuffer(void) { } if((0DataAdded(Substring(aBuf->DataStart(), - aBuf->DataEnd())))) { + aBuf->DataEnd()), aRequest))) { // Don't actually append on failure. return; @@ -1410,7 +1413,8 @@ void nsScanner::AppendToBuffer(nsScannerString::Buffer* aBuf) } } -void nsScanner::AppendASCIItoBuffer(const char* aData, PRUint32 aLen) +void nsScanner::AppendASCIItoBuffer(const char* aData, PRUint32 aLen, + nsIRequest *aRequest) { nsScannerString::Buffer* buf = nsScannerString::AllocBuffer(aLen); if (buf) @@ -1418,7 +1422,7 @@ void nsScanner::AppendASCIItoBuffer(const char* aData, PRUint32 aLen) LossyConvertEncoding converter(buf->DataStart()); converter.write(aData, aLen); converter.write_terminator(); - AppendToBuffer(buf); + AppendToBuffer(buf, aRequest); } } diff --git a/mozilla/htmlparser/src/nsScanner.h b/mozilla/htmlparser/src/nsScanner.h index 891165a08cc..39fb212bdaf 100644 --- a/mozilla/htmlparser/src/nsScanner.h +++ b/mozilla/htmlparser/src/nsScanner.h @@ -302,7 +302,8 @@ class nsScanner { * @param * @return */ - nsresult Append(const char* aBuffer, PRUint32 aLen); + nsresult Append(const char* aBuffer, PRUint32 aLen, + nsIRequest *aRequest); /** * Call this to copy bytes out of the scanner that have not yet been consumed @@ -377,9 +378,13 @@ class nsScanner { */ nsresult FillBuffer(void); - void AppendToBuffer(nsScannerString::Buffer*); - void AppendToBuffer(const nsAString& aStr) { AppendToBuffer(nsScannerString::AllocBufferFromString(aStr)); } - void AppendASCIItoBuffer(const char* aData, PRUint32 aLen); + void AppendToBuffer(nsScannerString::Buffer *, nsIRequest *aRequest); + void AppendToBuffer(const nsAString& aStr) + { + AppendToBuffer(nsScannerString::AllocBufferFromString(aStr), nsnull); + } + void AppendASCIItoBuffer(const char* aData, PRUint32 aLen, + nsIRequest *aRequest); nsCOMPtr mInputStream; nsScannerString* mSlidingBuffer;