diff --git a/mozilla/htmlparser/src/CNavDTD.cpp b/mozilla/htmlparser/src/CNavDTD.cpp index 62259818784..fbfdd2cc3f0 100644 --- a/mozilla/htmlparser/src/CNavDTD.cpp +++ b/mozilla/htmlparser/src/CNavDTD.cpp @@ -172,6 +172,7 @@ CNavDTD::CNavDTD() : nsIDTD(), mTempContext(0), mOpenHeadCount(0), mOpenMapCount(0), + mOpenFormCount(0), mParser(0), mTokenizer(0), mDTDMode(eDTDMode_quirks), @@ -3123,21 +3124,21 @@ nsresult CNavDTD::CloseHead(const nsIParserNode *aNode){ nsresult CNavDTD::OpenBody(const nsCParserNode *aNode){ NS_PRECONDITION(mBodyContext->GetCount() >= 0, kInvalidTagStackPos); - nsresult result=NS_OK; - - mFlags |= NS_PARSER_FLAG_HAD_BODY; + nsresult result = NS_OK; - if(NS_OK==result) { + if (!(mFlags & NS_PARSER_FLAG_HAD_FRAMESET)) { + + mFlags |= NS_PARSER_FLAG_HAD_BODY; STOP_TIMER(); MOZ_TIMER_DEBUGLOG(("Stop: Parse Time: CNavDTD::OpenBody(), this=%p\n", this)); - result=(mSink) ? mSink->OpenBody(*aNode) : NS_OK; + result = (mSink) ? mSink->OpenBody(*aNode) : NS_OK; MOZ_TIMER_DEBUGLOG(("Start: Parse Time: CNavDTD::OpenBody(), this=%p\n", this)); START_TIMER(); - if(!HasOpenContainer(eHTMLTag_body)) { + if (!HasOpenContainer(eHTMLTag_body)) { mBodyContext->Push(aNode); mTokenizer->PrependTokens(mMisplacedContent); } @@ -3202,7 +3203,7 @@ nsresult CNavDTD::OpenForm(const nsIParserNode *aNode){ mFlags |= NS_PARSER_FLAG_HAS_OPEN_FORM; } } - + mOpenFormCount++; return result; } @@ -3217,7 +3218,7 @@ nsresult CNavDTD::OpenForm(const nsIParserNode *aNode){ nsresult CNavDTD::CloseForm(const nsIParserNode *aNode){ // NS_PRECONDITION(mBodyContext->GetCount() > 0, kInvalidTagStackPos); nsresult result=NS_OK; - if(mFlags & NS_PARSER_FLAG_HAS_OPEN_FORM) { + if((mFlags & NS_PARSER_FLAG_HAS_OPEN_FORM) && (mOpenFormCount == 1)) { mFlags &= ~NS_PARSER_FLAG_HAS_OPEN_FORM; STOP_TIMER(); @@ -3230,6 +3231,7 @@ nsresult CNavDTD::CloseForm(const nsIParserNode *aNode){ mFlags &= ~NS_PARSER_FLAG_IS_FORM_CONTAINER; } + --mOpenFormCount; return result; } diff --git a/mozilla/htmlparser/src/CNavDTD.h b/mozilla/htmlparser/src/CNavDTD.h index 5e5d9c19995..dda6d2bbff8 100644 --- a/mozilla/htmlparser/src/CNavDTD.h +++ b/mozilla/htmlparser/src/CNavDTD.h @@ -508,6 +508,7 @@ protected: nsDTDContext* mTempContext; PRInt32 mOpenHeadCount; PRInt32 mOpenMapCount; + PRInt32 mOpenFormCount; nsParser* mParser; nsITokenizer* mTokenizer; nsDTDMode mDTDMode; diff --git a/mozilla/htmlparser/src/nsElementTable.cpp b/mozilla/htmlparser/src/nsElementTable.cpp index a1a7b08fe25..d6523b2bf87 100644 --- a/mozilla/htmlparser/src/nsElementTable.cpp +++ b/mozilla/htmlparser/src/nsElementTable.cpp @@ -64,7 +64,7 @@ TagList gInDL={2,{eHTMLTag_dl,eHTMLTag_body}}; TagList gInFrameset={1,{eHTMLTag_frameset}}; TagList gInNoframes={1,{eHTMLTag_noframes}}; //Removed ADDRESS to solve 24885 -TagList gInP={3,{eHTMLTag_span,eHTMLTag_form,eHTMLTag_table}}; // added table for bug 43678 +TagList gInP={2,{eHTMLTag_span,eHTMLTag_table}}; // added table for bug 43678, removed FORM bug 94269 TagList gOptgroupParents={2,{eHTMLTag_select,eHTMLTag_optgroup}}; TagList gBodyParents={2,{eHTMLTag_html,eHTMLTag_noframes}}; TagList gColParents={2,{eHTMLTag_table,eHTMLTag_colgroup}}; @@ -453,7 +453,7 @@ void InitializeElementTable(void) { /*tag*/ eHTMLTag_dd, /*req-parent excl-parent*/ eHTMLTag_unknown,eHTMLTag_unknown, /*rootnodes,endrootnodes*/ &gRootTags, &gRootTags, - /*autoclose starttags and endtags*/ &gDTCloseTags,0,0,0, + /*autoclose starttags and endtags*/ &gDTCloseTags,0,&gDLKids,0, /*parent,incl,exclgroups*/ kInlineEntity, kFlowEntity, kNone, /*special props, prop-range*/ kNoPropagate|kMustCloseSelf|kVerifyHierarchy,kDefaultPropRange, /*special parents,kids,skip*/ &gInDL,0,eHTMLTag_unknown); @@ -507,9 +507,9 @@ void InitializeElementTable(void) { /*tag*/ eHTMLTag_dt, /*req-parent excl-parent*/ eHTMLTag_unknown,eHTMLTag_unknown, /*rootnodes,endrootnodes*/ &gRootTags, &gRootTags, - /*autoclose starttags and endtags*/ &gDTCloseTags,0,0,0, + /*autoclose starttags and endtags*/ &gDTCloseTags,0,&gDLKids,0, /*parent,incl,exclgroups*/ kInlineEntity, (kFlowEntity-kHeading), kNone, // dt's parent group is inline - bug 65467 - /*special props, prop-range*/ (kNoPropagate|kMustCloseSelf),kDefaultPropRange, + /*special props, prop-range*/ (kNoPropagate|kMustCloseSelf|kVerifyHierarchy),kDefaultPropRange, /*special parents,kids,skip*/ &gInDL,0,eHTMLTag_unknown); Initialize( diff --git a/mozilla/htmlparser/src/nsHTMLTokenizer.cpp b/mozilla/htmlparser/src/nsHTMLTokenizer.cpp index b2fb33109b2..35eccbdcd71 100644 --- a/mozilla/htmlparser/src/nsHTMLTokenizer.cpp +++ b/mozilla/htmlparser/src/nsHTMLTokenizer.cpp @@ -629,7 +629,7 @@ nsresult nsHTMLTokenizer::ConsumeAttributes(PRUnichar aChar,CStartToken* aToken, // support XML like syntax to fix bugs like 44186 if(!key.IsEmpty() && kForwardSlash==key.First() && text.IsEmpty()) { aToken->SetEmpty(PR_TRUE); - isUsableAttr = !(mFlags & NS_IPARSER_FLAG_STRICT_MODE); + isUsableAttr = PR_FALSE; // Fix bug 103095 } if(isUsableAttr) { theAttrCount++; diff --git a/mozilla/parser/htmlparser/src/CNavDTD.cpp b/mozilla/parser/htmlparser/src/CNavDTD.cpp index 62259818784..fbfdd2cc3f0 100644 --- a/mozilla/parser/htmlparser/src/CNavDTD.cpp +++ b/mozilla/parser/htmlparser/src/CNavDTD.cpp @@ -172,6 +172,7 @@ CNavDTD::CNavDTD() : nsIDTD(), mTempContext(0), mOpenHeadCount(0), mOpenMapCount(0), + mOpenFormCount(0), mParser(0), mTokenizer(0), mDTDMode(eDTDMode_quirks), @@ -3123,21 +3124,21 @@ nsresult CNavDTD::CloseHead(const nsIParserNode *aNode){ nsresult CNavDTD::OpenBody(const nsCParserNode *aNode){ NS_PRECONDITION(mBodyContext->GetCount() >= 0, kInvalidTagStackPos); - nsresult result=NS_OK; - - mFlags |= NS_PARSER_FLAG_HAD_BODY; + nsresult result = NS_OK; - if(NS_OK==result) { + if (!(mFlags & NS_PARSER_FLAG_HAD_FRAMESET)) { + + mFlags |= NS_PARSER_FLAG_HAD_BODY; STOP_TIMER(); MOZ_TIMER_DEBUGLOG(("Stop: Parse Time: CNavDTD::OpenBody(), this=%p\n", this)); - result=(mSink) ? mSink->OpenBody(*aNode) : NS_OK; + result = (mSink) ? mSink->OpenBody(*aNode) : NS_OK; MOZ_TIMER_DEBUGLOG(("Start: Parse Time: CNavDTD::OpenBody(), this=%p\n", this)); START_TIMER(); - if(!HasOpenContainer(eHTMLTag_body)) { + if (!HasOpenContainer(eHTMLTag_body)) { mBodyContext->Push(aNode); mTokenizer->PrependTokens(mMisplacedContent); } @@ -3202,7 +3203,7 @@ nsresult CNavDTD::OpenForm(const nsIParserNode *aNode){ mFlags |= NS_PARSER_FLAG_HAS_OPEN_FORM; } } - + mOpenFormCount++; return result; } @@ -3217,7 +3218,7 @@ nsresult CNavDTD::OpenForm(const nsIParserNode *aNode){ nsresult CNavDTD::CloseForm(const nsIParserNode *aNode){ // NS_PRECONDITION(mBodyContext->GetCount() > 0, kInvalidTagStackPos); nsresult result=NS_OK; - if(mFlags & NS_PARSER_FLAG_HAS_OPEN_FORM) { + if((mFlags & NS_PARSER_FLAG_HAS_OPEN_FORM) && (mOpenFormCount == 1)) { mFlags &= ~NS_PARSER_FLAG_HAS_OPEN_FORM; STOP_TIMER(); @@ -3230,6 +3231,7 @@ nsresult CNavDTD::CloseForm(const nsIParserNode *aNode){ mFlags &= ~NS_PARSER_FLAG_IS_FORM_CONTAINER; } + --mOpenFormCount; return result; } diff --git a/mozilla/parser/htmlparser/src/CNavDTD.h b/mozilla/parser/htmlparser/src/CNavDTD.h index 5e5d9c19995..dda6d2bbff8 100644 --- a/mozilla/parser/htmlparser/src/CNavDTD.h +++ b/mozilla/parser/htmlparser/src/CNavDTD.h @@ -508,6 +508,7 @@ protected: nsDTDContext* mTempContext; PRInt32 mOpenHeadCount; PRInt32 mOpenMapCount; + PRInt32 mOpenFormCount; nsParser* mParser; nsITokenizer* mTokenizer; nsDTDMode mDTDMode; diff --git a/mozilla/parser/htmlparser/src/nsElementTable.cpp b/mozilla/parser/htmlparser/src/nsElementTable.cpp index a1a7b08fe25..d6523b2bf87 100644 --- a/mozilla/parser/htmlparser/src/nsElementTable.cpp +++ b/mozilla/parser/htmlparser/src/nsElementTable.cpp @@ -64,7 +64,7 @@ TagList gInDL={2,{eHTMLTag_dl,eHTMLTag_body}}; TagList gInFrameset={1,{eHTMLTag_frameset}}; TagList gInNoframes={1,{eHTMLTag_noframes}}; //Removed ADDRESS to solve 24885 -TagList gInP={3,{eHTMLTag_span,eHTMLTag_form,eHTMLTag_table}}; // added table for bug 43678 +TagList gInP={2,{eHTMLTag_span,eHTMLTag_table}}; // added table for bug 43678, removed FORM bug 94269 TagList gOptgroupParents={2,{eHTMLTag_select,eHTMLTag_optgroup}}; TagList gBodyParents={2,{eHTMLTag_html,eHTMLTag_noframes}}; TagList gColParents={2,{eHTMLTag_table,eHTMLTag_colgroup}}; @@ -453,7 +453,7 @@ void InitializeElementTable(void) { /*tag*/ eHTMLTag_dd, /*req-parent excl-parent*/ eHTMLTag_unknown,eHTMLTag_unknown, /*rootnodes,endrootnodes*/ &gRootTags, &gRootTags, - /*autoclose starttags and endtags*/ &gDTCloseTags,0,0,0, + /*autoclose starttags and endtags*/ &gDTCloseTags,0,&gDLKids,0, /*parent,incl,exclgroups*/ kInlineEntity, kFlowEntity, kNone, /*special props, prop-range*/ kNoPropagate|kMustCloseSelf|kVerifyHierarchy,kDefaultPropRange, /*special parents,kids,skip*/ &gInDL,0,eHTMLTag_unknown); @@ -507,9 +507,9 @@ void InitializeElementTable(void) { /*tag*/ eHTMLTag_dt, /*req-parent excl-parent*/ eHTMLTag_unknown,eHTMLTag_unknown, /*rootnodes,endrootnodes*/ &gRootTags, &gRootTags, - /*autoclose starttags and endtags*/ &gDTCloseTags,0,0,0, + /*autoclose starttags and endtags*/ &gDTCloseTags,0,&gDLKids,0, /*parent,incl,exclgroups*/ kInlineEntity, (kFlowEntity-kHeading), kNone, // dt's parent group is inline - bug 65467 - /*special props, prop-range*/ (kNoPropagate|kMustCloseSelf),kDefaultPropRange, + /*special props, prop-range*/ (kNoPropagate|kMustCloseSelf|kVerifyHierarchy),kDefaultPropRange, /*special parents,kids,skip*/ &gInDL,0,eHTMLTag_unknown); Initialize( diff --git a/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp b/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp index b2fb33109b2..35eccbdcd71 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp +++ b/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp @@ -629,7 +629,7 @@ nsresult nsHTMLTokenizer::ConsumeAttributes(PRUnichar aChar,CStartToken* aToken, // support XML like syntax to fix bugs like 44186 if(!key.IsEmpty() && kForwardSlash==key.First() && text.IsEmpty()) { aToken->SetEmpty(PR_TRUE); - isUsableAttr = !(mFlags & NS_IPARSER_FLAG_STRICT_MODE); + isUsableAttr = PR_FALSE; // Fix bug 103095 } if(isUsableAttr) { theAttrCount++;