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++;