diff --git a/htmlparser/src/CNavDTD.cpp b/htmlparser/src/CNavDTD.cpp
index 989222e4f19..b0a8d855236 100644
--- a/htmlparser/src/CNavDTD.cpp
+++ b/htmlparser/src/CNavDTD.cpp
@@ -472,70 +472,71 @@ nsresult CNavDTD::BuildModel(nsIParser* aParser,nsITokenizer* aTokenizer,nsIToke
nsresult result = NS_OK;
- if (aTokenizer && mSink && aParser) {
+ if (aTokenizer && aParser) {
nsITokenizer* oldTokenizer = mTokenizer;
mTokenizer = aTokenizer;
mParser = (nsParser*)aParser;
mTokenAllocator = mTokenizer->GetTokenAllocator();
+ if (mSink) {
+ if (mBodyContext->GetCount() == 0) {
+ CStartToken* theToken=nsnull;
+ if(ePlainText==mDocType) {
+ //we do this little trick for text files, in both normal and viewsource mode...
+ theToken=NS_STATIC_CAST(CStartToken*,mTokenAllocator->CreateTokenOfType(eToken_start,eHTMLTag_pre));
+ if(theToken) {
+ mTokenizer->PushTokenFront(theToken);
+ }
+ }
- if (mBodyContext->GetCount() == 0) {
- CStartToken* theToken=nsnull;
- if(ePlainText==mDocType) {
- //we do this little trick for text files, in both normal and viewsource mode...
- theToken=NS_STATIC_CAST(CStartToken*,mTokenAllocator->CreateTokenOfType(eToken_start,eHTMLTag_pre));
- if(theToken) {
+ // always open a body if frames are disabled....
+ if(!(mFlags & NS_DTD_FLAG_FRAMES_ENABLED)) {
+ theToken=NS_STATIC_CAST(CStartToken*,mTokenAllocator->CreateTokenOfType(eToken_start,eHTMLTag_body,NS_LITERAL_STRING("body")));
mTokenizer->PushTokenFront(theToken);
}
- }
-
- // always open a body if frames are disabled....
- if(!(mFlags & NS_DTD_FLAG_FRAMES_ENABLED)) {
- theToken=NS_STATIC_CAST(CStartToken*,mTokenAllocator->CreateTokenOfType(eToken_start,eHTMLTag_body,NS_LITERAL_STRING("body")));
- mTokenizer->PushTokenFront(theToken);
- }
- //if the content model is empty, then begin by opening ...
- theToken=NS_STATIC_CAST(CStartToken*,mTokenAllocator->CreateTokenOfType(eToken_start,eHTMLTag_html,NS_LITERAL_STRING("html")));
- if(theToken) {
- mTokenizer->PushTokenFront(theToken); //this token should get pushed on the context stack.
- }
- }
-
- mSink->WillProcessTokens();
-
- while (NS_SUCCEEDED(result)) {
- if (!(mFlags & NS_DTD_FLAG_STOP_PARSING)) {
- CToken* theToken = mTokenizer->PopToken();
- if (theToken) {
- result = HandleToken(theToken,aParser);
+ //if the content model is empty, then begin by opening ...
+ theToken=NS_STATIC_CAST(CStartToken*,mTokenAllocator->CreateTokenOfType(eToken_start,eHTMLTag_html,NS_LITERAL_STRING("html")));
+ if(theToken) {
+ mTokenizer->PushTokenFront(theToken); //this token should get pushed on the context stack.
}
- else break;
- }
- else {
- result = NS_ERROR_HTMLPARSER_STOPPARSING;
- break;
}
+
+ mSink->WillProcessTokens();
- if ((NS_ERROR_HTMLPARSER_INTERRUPTED == mSink->DidProcessAToken())) {
- // The content sink has requested that DTD interrupt processing tokens
- // So we need to make sure the parser is in a state where it can be
- // interrupted.
- // The mParser->CanInterrupt will return TRUE if BuildModel was called
- // from a place in the parser where it prepared to handle a return value of
- // NS_ERROR_HTMLPARSER_INTERRUPTED.
- // If the parser has mPrevContext then it may be processing
- // Script so we should not allow it to be interrupted.
-
- if ((mParser->CanInterrupt()) &&
- (nsnull == mParser->PeekContext()->mPrevContext) &&
- (eHTMLTag_unknown==mSkipTarget)) {
- result = NS_ERROR_HTMLPARSER_INTERRUPTED;
+ while (NS_SUCCEEDED(result)) {
+ if (!(mFlags & NS_DTD_FLAG_STOP_PARSING)) {
+ CToken* theToken = mTokenizer->PopToken();
+ if (theToken) {
+ result = HandleToken(theToken,aParser);
+ }
+ else break;
+ }
+ else {
+ result = NS_ERROR_HTMLPARSER_STOPPARSING;
break;
}
- }
- }//while
- mTokenizer = oldTokenizer;
+
+ if ((NS_ERROR_HTMLPARSER_INTERRUPTED == mSink->DidProcessAToken())) {
+ // The content sink has requested that DTD interrupt processing tokens
+ // So we need to make sure the parser is in a state where it can be
+ // interrupted.
+ // The mParser->CanInterrupt will return TRUE if BuildModel was called
+ // from a place in the parser where it prepared to handle a return value of
+ // NS_ERROR_HTMLPARSER_INTERRUPTED.
+ // If the parser has mPrevContext then it may be processing
+ // Script so we should not allow it to be interrupted.
+
+ if ((mParser->CanInterrupt()) &&
+ (nsnull == mParser->PeekContext()->mPrevContext) &&
+ (eHTMLTag_unknown==mSkipTarget)) {
+ result = NS_ERROR_HTMLPARSER_INTERRUPTED;
+ break;
+ }
+ }
+ }//while
+ mTokenizer = oldTokenizer;
+ }
}
return result;
diff --git a/parser/htmlparser/src/CNavDTD.cpp b/parser/htmlparser/src/CNavDTD.cpp
index 989222e4f19..b0a8d855236 100644
--- a/parser/htmlparser/src/CNavDTD.cpp
+++ b/parser/htmlparser/src/CNavDTD.cpp
@@ -472,70 +472,71 @@ nsresult CNavDTD::BuildModel(nsIParser* aParser,nsITokenizer* aTokenizer,nsIToke
nsresult result = NS_OK;
- if (aTokenizer && mSink && aParser) {
+ if (aTokenizer && aParser) {
nsITokenizer* oldTokenizer = mTokenizer;
mTokenizer = aTokenizer;
mParser = (nsParser*)aParser;
mTokenAllocator = mTokenizer->GetTokenAllocator();
+ if (mSink) {
+ if (mBodyContext->GetCount() == 0) {
+ CStartToken* theToken=nsnull;
+ if(ePlainText==mDocType) {
+ //we do this little trick for text files, in both normal and viewsource mode...
+ theToken=NS_STATIC_CAST(CStartToken*,mTokenAllocator->CreateTokenOfType(eToken_start,eHTMLTag_pre));
+ if(theToken) {
+ mTokenizer->PushTokenFront(theToken);
+ }
+ }
- if (mBodyContext->GetCount() == 0) {
- CStartToken* theToken=nsnull;
- if(ePlainText==mDocType) {
- //we do this little trick for text files, in both normal and viewsource mode...
- theToken=NS_STATIC_CAST(CStartToken*,mTokenAllocator->CreateTokenOfType(eToken_start,eHTMLTag_pre));
- if(theToken) {
+ // always open a body if frames are disabled....
+ if(!(mFlags & NS_DTD_FLAG_FRAMES_ENABLED)) {
+ theToken=NS_STATIC_CAST(CStartToken*,mTokenAllocator->CreateTokenOfType(eToken_start,eHTMLTag_body,NS_LITERAL_STRING("body")));
mTokenizer->PushTokenFront(theToken);
}
- }
-
- // always open a body if frames are disabled....
- if(!(mFlags & NS_DTD_FLAG_FRAMES_ENABLED)) {
- theToken=NS_STATIC_CAST(CStartToken*,mTokenAllocator->CreateTokenOfType(eToken_start,eHTMLTag_body,NS_LITERAL_STRING("body")));
- mTokenizer->PushTokenFront(theToken);
- }
- //if the content model is empty, then begin by opening ...
- theToken=NS_STATIC_CAST(CStartToken*,mTokenAllocator->CreateTokenOfType(eToken_start,eHTMLTag_html,NS_LITERAL_STRING("html")));
- if(theToken) {
- mTokenizer->PushTokenFront(theToken); //this token should get pushed on the context stack.
- }
- }
-
- mSink->WillProcessTokens();
-
- while (NS_SUCCEEDED(result)) {
- if (!(mFlags & NS_DTD_FLAG_STOP_PARSING)) {
- CToken* theToken = mTokenizer->PopToken();
- if (theToken) {
- result = HandleToken(theToken,aParser);
+ //if the content model is empty, then begin by opening ...
+ theToken=NS_STATIC_CAST(CStartToken*,mTokenAllocator->CreateTokenOfType(eToken_start,eHTMLTag_html,NS_LITERAL_STRING("html")));
+ if(theToken) {
+ mTokenizer->PushTokenFront(theToken); //this token should get pushed on the context stack.
}
- else break;
- }
- else {
- result = NS_ERROR_HTMLPARSER_STOPPARSING;
- break;
}
+
+ mSink->WillProcessTokens();
- if ((NS_ERROR_HTMLPARSER_INTERRUPTED == mSink->DidProcessAToken())) {
- // The content sink has requested that DTD interrupt processing tokens
- // So we need to make sure the parser is in a state where it can be
- // interrupted.
- // The mParser->CanInterrupt will return TRUE if BuildModel was called
- // from a place in the parser where it prepared to handle a return value of
- // NS_ERROR_HTMLPARSER_INTERRUPTED.
- // If the parser has mPrevContext then it may be processing
- // Script so we should not allow it to be interrupted.
-
- if ((mParser->CanInterrupt()) &&
- (nsnull == mParser->PeekContext()->mPrevContext) &&
- (eHTMLTag_unknown==mSkipTarget)) {
- result = NS_ERROR_HTMLPARSER_INTERRUPTED;
+ while (NS_SUCCEEDED(result)) {
+ if (!(mFlags & NS_DTD_FLAG_STOP_PARSING)) {
+ CToken* theToken = mTokenizer->PopToken();
+ if (theToken) {
+ result = HandleToken(theToken,aParser);
+ }
+ else break;
+ }
+ else {
+ result = NS_ERROR_HTMLPARSER_STOPPARSING;
break;
}
- }
- }//while
- mTokenizer = oldTokenizer;
+
+ if ((NS_ERROR_HTMLPARSER_INTERRUPTED == mSink->DidProcessAToken())) {
+ // The content sink has requested that DTD interrupt processing tokens
+ // So we need to make sure the parser is in a state where it can be
+ // interrupted.
+ // The mParser->CanInterrupt will return TRUE if BuildModel was called
+ // from a place in the parser where it prepared to handle a return value of
+ // NS_ERROR_HTMLPARSER_INTERRUPTED.
+ // If the parser has mPrevContext then it may be processing
+ // Script so we should not allow it to be interrupted.
+
+ if ((mParser->CanInterrupt()) &&
+ (nsnull == mParser->PeekContext()->mPrevContext) &&
+ (eHTMLTag_unknown==mSkipTarget)) {
+ result = NS_ERROR_HTMLPARSER_INTERRUPTED;
+ break;
+ }
+ }
+ }//while
+ mTokenizer = oldTokenizer;
+ }
}
return result;