diff --git a/mozilla/parser/htmlparser/src/CParserContext.cpp b/mozilla/parser/htmlparser/src/CParserContext.cpp
index 36f152108b6..e716208e1ec 100644
--- a/mozilla/parser/htmlparser/src/CParserContext.cpp
+++ b/mozilla/parser/htmlparser/src/CParserContext.cpp
@@ -47,14 +47,6 @@
MOZ_DECL_CTOR_COUNTER(CParserContext)
-/**
- * Your friendly little constructor. Ok, it's not the friendly, but the only guy
- * using it is the parser.
- * @update gess7/23/98
- * @param aScanner
- * @param aKey
- * @param aListener
- */
CParserContext::CParserContext(nsScanner* aScanner,
void *aKey,
eParserCommands aCommand,
@@ -62,89 +54,38 @@ CParserContext::CParserContext(nsScanner* aScanner,
nsIDTD *aDTD,
eAutoDetectResult aStatus,
PRBool aCopyUnused)
+ : mDTD(aDTD),
+ mListener(aListener),
+ mKey(aKey),
+ mPrevContext(nsnull),
+ mScanner(aScanner),
+ mDTDMode(eDTDMode_unknown),
+ mStreamListenerState(eNone),
+ mContextType(eCTNone),
+ mAutoDetectStatus(aStatus),
+ mParserCommand(aCommand),
+ mMultipart(PR_TRUE),
+ mCopyUnused(aCopyUnused),
+ mTransferBufferSize(eTransferBufferSize)
{
MOZ_COUNT_CTOR(CParserContext);
-
- mScanner=aScanner;
- mKey=aKey;
- mPrevContext=0;
- mListener=aListener;
- mDTDMode=eDTDMode_unknown;
- mAutoDetectStatus=aStatus;
- mTransferBuffer=0;
- mDTD=aDTD;
- mTokenizer = 0;
- mTransferBufferSize=eTransferBufferSize;
- mStreamListenerState=eNone;
- mMultipart=PR_TRUE;
- mContextType=eCTNone;
- mCopyUnused=aCopyUnused;
- mParserCommand=aCommand;
- mRequest=0;
}
-/**
- * Your friendly little constructor. Ok, it's not the friendly, but the only guy
- * using it is the parser.
- * @update gess7/23/98
- * @param aScanner
- * @param aKey
- * @param aListener
- */
-CParserContext::CParserContext(const CParserContext &aContext) : mMimeType() {
- MOZ_COUNT_CTOR(CParserContext);
-
- mScanner=aContext.mScanner;
- mKey=aContext.mKey;
- mPrevContext=0;
- mListener=aContext.mListener;
-
- mDTDMode=aContext.mDTDMode;
- mAutoDetectStatus=aContext.mAutoDetectStatus;
- mTransferBuffer=aContext.mTransferBuffer;
- mDTD=aContext.mDTD;
-
- mTokenizer = aContext.mTokenizer;
-
- mTransferBufferSize=eTransferBufferSize;
- mStreamListenerState=aContext.mStreamListenerState;
- mMultipart=aContext.mMultipart;
- mContextType=aContext.mContextType;
- mRequest=aContext.mRequest;
- mParserCommand=aContext.mParserCommand;
- SetMimeType(aContext.mMimeType);
-}
-
-
-/**
- * Destructor for parser context
- */
CParserContext::~CParserContext()
{
+ // It's ok to simply ingore the PrevContext.
MOZ_COUNT_DTOR(CParserContext);
-
- if(mScanner) {
- delete mScanner;
- }
-
- if(mTransferBuffer) {
- delete [] mTransferBuffer;
- }
- //Remember that it's ok to simply ingore the PrevContext.
}
-
-/**
- * Set's the mimetype for this context
- * @update rickg 03.18.2000
- */
-void CParserContext::SetMimeType(const nsACString& aMimeType){
+void
+CParserContext::SetMimeType(const nsACString& aMimeType)
+{
mMimeType.Assign(aMimeType);
- mDocType=ePlainText;
+ mDocType = ePlainText;
- if(mMimeType.EqualsLiteral(kHTMLTextContentType))
- mDocType=eHTML_Strict;
+ if (mMimeType.EqualsLiteral(kHTMLTextContentType))
+ mDocType = eHTML_Strict;
else if (mMimeType.EqualsLiteral(kXMLTextContentType) ||
mMimeType.EqualsLiteral(kXMLApplicationContentType) ||
mMimeType.EqualsLiteral(kXHTMLApplicationContentType) ||
@@ -154,7 +95,7 @@ void CParserContext::SetMimeType(const nsACString& aMimeType){
#endif
mMimeType.EqualsLiteral(kRDFApplicationContentType) ||
mMimeType.EqualsLiteral(kRDFTextContentType))
- mDocType=eXML;
+ mDocType = eXML;
}
nsresult
@@ -164,7 +105,7 @@ CParserContext::GetTokenizer(PRInt32 aType,
{
nsresult result = NS_OK;
- if(!mTokenizer) {
+ if (!mTokenizer) {
if (aType == NS_IPARSER_FLAG_HTML || mParserCommand == eViewSource) {
nsCOMPtr theSink = do_QueryInterface(aSink);
PRUint16 theFlags = 0;
@@ -196,12 +137,12 @@ CParserContext::GetTokenizer(PRInt32 aType,
mTokenizer->CopyState(mPrevContext->mTokenizer);
}
}
- else if (aType == NS_IPARSER_FLAG_XML)
- {
+ else if (aType == NS_IPARSER_FLAG_XML) {
mTokenizer = do_QueryInterface(mDTD, &result);
}
}
aTokenizer = mTokenizer;
+
return result;
}
diff --git a/mozilla/parser/htmlparser/src/CParserContext.h b/mozilla/parser/htmlparser/src/CParserContext.h
index 41d09736d3a..c766291a34b 100644
--- a/mozilla/parser/htmlparser/src/CParserContext.h
+++ b/mozilla/parser/htmlparser/src/CParserContext.h
@@ -52,6 +52,7 @@
#include "nsScanner.h"
#include "nsString.h"
#include "nsCOMPtr.h"
+#include "nsAutoPtr.h"
/**
* Note that the parser is given FULL access to all
@@ -73,7 +74,6 @@ public:
eAutoDetectResult aStatus=eUnknownDetect,
PRBool aCopyUnused=PR_FALSE);
- CParserContext( const CParserContext& aContext);
~CParserContext();
nsresult GetTokenizer(PRInt32 aType,
@@ -85,11 +85,11 @@ public:
// why is mRequest strongly referenced? see bug 102376.
nsCOMPtr mDTD;
nsCOMPtr mListener;
- char* mTransferBuffer;
+ nsAutoArrayPtr mTransferBuffer;
void* mKey;
nsCOMPtr mTokenizer;
CParserContext* mPrevContext;
- nsScanner* mScanner;
+ nsAutoPtr mScanner;
nsCString mMimeType;
nsDTDMode mDTDMode;
diff --git a/mozilla/parser/htmlparser/src/nsParser.cpp b/mozilla/parser/htmlparser/src/nsParser.cpp
index d8e6fb2a75f..19e30f06fb0 100644
--- a/mozilla/parser/htmlparser/src/nsParser.cpp
+++ b/mozilla/parser/htmlparser/src/nsParser.cpp
@@ -1013,8 +1013,11 @@ FindSuitableDTD(CParserContext& aParserContext, PRBool* aReturn)
// Let's start by trying the defaultDTD, if one exists...
if (aParserContext.mDTD) {
eAutoDetectResult canParse = aParserContext.mDTD->CanParse(aParserContext);
- if (canParse != eUnknownDetect && canParse != eInvalidDetect)
- return PR_TRUE;
+ if (canParse != eUnknownDetect && canParse != eInvalidDetect) {
+ *aReturn = PR_TRUE;
+
+ return NS_OK;
+ }
}
CSharedParserObjects* sharedObjects;
@@ -2639,8 +2642,7 @@ NS_IMETHODIMP
nsParser::GetDTD(nsIDTD** aDTD)
{
if (mParserContext) {
- *aDTD = mParserContext->mDTD;
- NS_IF_ADDREF(*aDTD);
+ NS_IF_ADDREF(*aDTD = mParserContext->mDTD);
}
return NS_OK;