diff --git a/content/html/document/src/nsHTMLContentSink.cpp b/content/html/document/src/nsHTMLContentSink.cpp index 0e17bd125244..b8697e54683c 100644 --- a/content/html/document/src/nsHTMLContentSink.cpp +++ b/content/html/document/src/nsHTMLContentSink.cpp @@ -73,10 +73,6 @@ #include "nsIDOMDocumentType.h" #include "nsIScriptElement.h" -#include "nsIDOMHTMLFormElement.h" -#include "nsIFormControl.h" -#include "nsIForm.h" - #include "nsIComponentManager.h" #include "nsIServiceManager.h" @@ -161,8 +157,6 @@ static const contentCreatorCallback sContentCreatorCallbacks[] = { class SinkContext; class HTMLContentSink; -static void MaybeSetForm(nsGenericHTMLElement*, nsHTMLTag, HTMLContentSink*); - class HTMLContentSink : public nsContentSink, #ifdef DEBUG public nsIDebugDumpContent, @@ -171,7 +165,6 @@ class HTMLContentSink : public nsContentSink, { public: friend class SinkContext; - friend void MaybeSetForm(nsGenericHTMLElement*, nsHTMLTag, HTMLContentSink*); HTMLContentSink(); virtual ~HTMLContentSink(); @@ -211,7 +204,7 @@ public: NS_IMETHOD EndContext(PRInt32 aID); NS_IMETHOD OpenHead(); NS_IMETHOD IsEnabled(PRInt32 aTag, bool* aReturn); - NS_IMETHOD_(bool) IsFormOnStack(); + NS_IMETHOD_(bool) IsFormOnStack() { return false; } #ifdef DEBUG // nsIDebugDumpContent @@ -244,8 +237,6 @@ protected: nsRefPtr mBody; nsRefPtr mHead; - nsRefPtr mCurrentForm; - nsAutoTArray mContextStack; SinkContext* mCurrentContext; SinkContext* mHeadContext; @@ -260,8 +251,7 @@ protected: PRUint8 mScriptEnabled : 1; PRUint8 mFramesEnabled : 1; - PRUint8 mFormOnStack : 1; - PRUint8 unused : 5; // bits available if someone needs one + PRUint8 unused : 6; // bits available if someone needs one nsINodeInfo* mNodeInfoCache[NS_HTML_TAG_MAX + 1]; @@ -271,8 +261,6 @@ protected: nsresult CloseHTML(); nsresult OpenBody(const nsIParserNode& aNode); nsresult CloseBody(); - nsresult OpenForm(const nsIParserNode& aNode); - nsresult CloseForm(); nsresult OpenHeadContext(); void CloseHeadContext(); @@ -460,39 +448,6 @@ HTMLContentSink::AddAttributes(const nsIParserNode& aNode, return NS_OK; } -static void -MaybeSetForm(nsGenericHTMLElement* aContent, nsHTMLTag aNodeType, - HTMLContentSink* aSink) -{ - nsGenericHTMLElement* form = aSink->mCurrentForm; - - if (!form) { - return; - } - - switch (aNodeType) { - case eHTMLTag_button: - case eHTMLTag_fieldset: - case eHTMLTag_label: - case eHTMLTag_object: - case eHTMLTag_input: - case eHTMLTag_select: - case eHTMLTag_textarea: - break; - default: - return; - } - - nsCOMPtr formControl(do_QueryInterface(aContent)); - NS_ASSERTION(formControl, - "nsGenericHTMLElement didn't implement nsIFormControl"); - nsCOMPtr formElement(do_QueryInterface(form)); - NS_ASSERTION(formElement, - "nsGenericHTMLElement didn't implement nsIDOMHTMLFormElement"); - - formControl->SetForm(formElement); -} - /** * Factory subroutine to create all of the html content objects. */ @@ -725,7 +680,6 @@ SinkContext::OpenContainer(const nsIParserNode& aNode) ++mStackPos; rv = mSink->AddAttributes(aNode, content); - MaybeSetForm(content, nodeType, mSink); mStack[mStackPos - 2].Add(content); @@ -738,7 +692,7 @@ SinkContext::OpenContainer(const nsIParserNode& aNode) // Special handling for certain tags switch (nodeType) { case eHTMLTag_form: - mSink->mCurrentForm = content; + MOZ_NOT_REACHED("Must not use HTMLContentSink for forms."); break; case eHTMLTag_frameset: @@ -818,7 +772,7 @@ SinkContext::CloseContainer(const nsHTMLTag aTag) --mStackPos; nsHTMLTag nodeType = mStack[mStackPos].mType; - NS_ASSERTION(nodeType == eHTMLTag_form || nodeType == aTag, + NS_ASSERTION(nodeType == aTag, "Tag mismatch. Closing tag on wrong context or something?"); nsGenericHTMLElement* content = mStack[mStackPos].mContent; @@ -865,18 +819,7 @@ SinkContext::CloseContainer(const nsHTMLTag aTag) break; case eHTMLTag_form: - { - mSink->mFormOnStack = false; - // If there's a FORM on the stack, but this close tag doesn't - // close the form, then close out the form *and* close out the - // next container up. This is since the parser doesn't do fix up - // of invalid form nesting. When the end FORM tag comes through, - // we'll ignore it. - if (aTag != nodeType) { - result = CloseContainer(aTag); - } - } - + MOZ_NOT_REACHED("Must not use HTMLContentSink for forms."); break; #ifdef MOZ_MEDIA @@ -937,16 +880,9 @@ SinkContext::AddLeaf(const nsIParserNode& aNode) mSink->CreateContentObject(aNode, nodeType); NS_ENSURE_TRUE(content, NS_ERROR_OUT_OF_MEMORY); - if (nodeType == eHTMLTag_form) { - mSink->mCurrentForm = content; - } - rv = mSink->AddAttributes(aNode, content); - NS_ENSURE_SUCCESS(rv, rv); - MaybeSetForm(content, nodeType, mSink); - // Add new leaf to its parent AddLeaf(content); @@ -1434,7 +1370,6 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(HTMLContentSink, nsContentSink) NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mRoot) NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mBody) NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mHead) - NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mCurrentForm) for (PRUint32 i = 0; i < ArrayLength(tmp->mNodeInfoCache); ++i) { NS_IF_RELEASE(tmp->mNodeInfoCache[i]); } @@ -1445,7 +1380,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(HTMLContentSink, NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mRoot) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mBody) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mHead) - NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mCurrentForm) for (PRUint32 i = 0; i < ArrayLength(tmp->mNodeInfoCache); ++i) { NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mNodeInfoCache[i]"); cb.NoteXPCOMChild(tmp->mNodeInfoCache[i]); @@ -1666,12 +1600,6 @@ HTMLContentSink::SetParser(nsParserBase* aParser) return NS_OK; } -NS_IMETHODIMP_(bool) -HTMLContentSink::IsFormOnStack() -{ - return mFormOnStack; -} - NS_IMETHODIMP HTMLContentSink::BeginContext(PRInt32 aPosition) { @@ -1885,66 +1813,6 @@ HTMLContentSink::CloseBody() return NS_OK; } -nsresult -HTMLContentSink::OpenForm(const nsIParserNode& aNode) -{ - nsresult result = NS_OK; - - mCurrentContext->FlushTextAndRelease(); - - SINK_TRACE_NODE(SINK_TRACE_CALLS, - "HTMLContentSink::OpenForm", - eHTMLTag_form, - mCurrentContext->mStackPos, - this); - - // Close out previous form if it's there. If there is one - // around, it's probably because the last one wasn't well-formed. - mCurrentForm = nsnull; - - // Check if the parent is a table, tbody, thead, tfoot, tr, col or - // colgroup. If so, we fix up by making the form leaf content. - if (mCurrentContext->IsCurrentContainer(eHTMLTag_table) || - mCurrentContext->IsCurrentContainer(eHTMLTag_tbody) || - mCurrentContext->IsCurrentContainer(eHTMLTag_thead) || - mCurrentContext->IsCurrentContainer(eHTMLTag_tfoot) || - mCurrentContext->IsCurrentContainer(eHTMLTag_tr) || - mCurrentContext->IsCurrentContainer(eHTMLTag_col) || - mCurrentContext->IsCurrentContainer(eHTMLTag_colgroup)) { - result = mCurrentContext->AddLeaf(aNode); - } else { - mFormOnStack = true; - // Otherwise the form can be a content parent. - result = mCurrentContext->OpenContainer(aNode); - } - - return result; -} - -nsresult -HTMLContentSink::CloseForm() -{ - nsresult result = NS_OK; - - SINK_TRACE_NODE(SINK_TRACE_CALLS, - "HTMLContentSink::CloseForm", - eHTMLTag_form, - mCurrentContext->mStackPos - 1, - this); - - if (mCurrentForm) { - // if this is a well-formed form, close it too - if (mCurrentContext->IsCurrentContainer(eHTMLTag_form)) { - result = mCurrentContext->CloseContainer(eHTMLTag_form); - mFormOnStack = false; - } - - mCurrentForm = nsnull; - } - - return result; -} - NS_IMETHODIMP HTMLContentSink::IsEnabled(PRInt32 aTag, bool* aReturn) { @@ -1993,7 +1861,8 @@ HTMLContentSink::OpenContainer(const nsIParserNode& aNode) } break; case eHTMLTag_form: - rv = OpenForm(aNode); + MOZ_NOT_REACHED("Must not use HTMLContentSink for forms."); + rv = NS_ERROR_NOT_IMPLEMENTED; break; default: rv = mCurrentContext->OpenContainer(aNode); @@ -2023,7 +1892,8 @@ HTMLContentSink::CloseContainer(const eHTMLTags aTag) rv = CloseHTML(); break; case eHTMLTag_form: - rv = CloseForm(); + MOZ_NOT_REACHED("Must not use HTMLContentSink for forms."); + rv = NS_ERROR_NOT_IMPLEMENTED; break; default: rv = mCurrentContext->CloseContainer(aTag);