diff options
Diffstat (limited to 'WebCore/html/parser/HTMLTreeBuilder.cpp')
-rw-r--r-- | WebCore/html/parser/HTMLTreeBuilder.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/WebCore/html/parser/HTMLTreeBuilder.cpp b/WebCore/html/parser/HTMLTreeBuilder.cpp index afac2a0..355dc8d 100644 --- a/WebCore/html/parser/HTMLTreeBuilder.cpp +++ b/WebCore/html/parser/HTMLTreeBuilder.cpp @@ -323,7 +323,7 @@ private: }; -HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, HTMLDocument* document, bool reportErrors) +HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, HTMLDocument* document, bool reportErrors, bool usePreHTML5ParserQuirks) : m_framesetOk(true) , m_document(document) , m_tree(document, FragmentScriptingAllowed, false) @@ -335,12 +335,13 @@ HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, HTMLDocument* documen , m_tokenizer(tokenizer) , m_scriptToProcessStartLine(uninitializedLineNumberValue) , m_lastScriptElementStartLine(uninitializedLineNumberValue) + , m_usePreHTML5ParserQuirks(usePreHTML5ParserQuirks) { } // FIXME: Member variables should be grouped into self-initializing structs to // minimize code duplication between these constructors. -HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, DocumentFragment* fragment, Element* contextElement, FragmentScriptingPermission scriptingPermission) +HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, DocumentFragment* fragment, Element* contextElement, FragmentScriptingPermission scriptingPermission, bool usePreHTML5ParserQuirks) : m_framesetOk(true) , m_fragmentContext(fragment, contextElement, scriptingPermission) , m_document(m_fragmentContext.document()) @@ -353,6 +354,7 @@ HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, DocumentFragment* fra , m_tokenizer(tokenizer) , m_scriptToProcessStartLine(uninitializedLineNumberValue) , m_lastScriptElementStartLine(uninitializedLineNumberValue) + , m_usePreHTML5ParserQuirks(usePreHTML5ParserQuirks) { if (contextElement) { // Steps 4.2-4.6 of the HTML5 Fragment Case parsing algorithm: @@ -2204,6 +2206,13 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token) if (isParsingFragment() && m_fragmentContext.scriptingPermission() == FragmentScriptingNotAllowed) m_scriptToProcess->removeAllChildren(); setInsertionMode(m_originalInsertionMode); + + // This token will not have been created by the tokenizer if a + // self-closing script tag was encountered and pre-HTML5 parser + // quirks are enabled. We must set the tokenizer's state to + // DataState explicitly if the tokenizer didn't have a chance to. + ASSERT(m_tokenizer->state() == HTMLTokenizer::DataState || m_usePreHTML5ParserQuirks); + m_tokenizer->setState(HTMLTokenizer::DataState); return; } m_tree.openElements()->pop(); @@ -2706,6 +2715,8 @@ bool HTMLTreeBuilder::processStartTagForInHead(AtomicHTMLToken& token) } if (token.name() == scriptTag) { processScriptStartTag(token); + if (m_usePreHTML5ParserQuirks && token.selfClosing()) + processFakeEndTag(scriptTag); return true; } if (token.name() == headTag) { |