| Index: third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp
|
| diff --git a/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp b/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp
|
| index 8ef2234ecf6d917f8a31b2bed8ecb40f5fdb5aff..2765eef4180384be8cf960de6147d67a810dec05 100644
|
| --- a/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp
|
| +++ b/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp
|
| @@ -267,7 +267,7 @@ private:
|
| unsigned m_end;
|
| };
|
|
|
| -HTMLTreeBuilder::HTMLTreeBuilder(HTMLDocumentParser* parser, HTMLDocument* document, ParserContentPolicy parserContentPolicy, const HTMLParserOptions& options)
|
| +HTMLTreeBuilder::HTMLTreeBuilder(HTMLDocumentParser* parser, Document& document, ParserContentPolicy parserContentPolicy, const HTMLParserOptions& options)
|
| : m_framesetOk(true)
|
| #if ENABLE(ASSERT)
|
| , m_isAttached(true)
|
| @@ -282,24 +282,13 @@ HTMLTreeBuilder::HTMLTreeBuilder(HTMLDocumentParser* parser, HTMLDocument* docum
|
| {
|
| }
|
|
|
| -// FIXME: Member variables should be grouped into self-initializing structs to
|
| -// minimize code duplication between these constructors.
|
| HTMLTreeBuilder::HTMLTreeBuilder(HTMLDocumentParser* parser, DocumentFragment* fragment, Element* contextElement, ParserContentPolicy parserContentPolicy, const HTMLParserOptions& options)
|
| - : m_framesetOk(true)
|
| -#if ENABLE(ASSERT)
|
| - , m_isAttached(true)
|
| -#endif
|
| - , m_fragmentContext(fragment, contextElement)
|
| - , m_tree(fragment, parserContentPolicy)
|
| - , m_insertionMode(InitialMode)
|
| - , m_originalInsertionMode(InitialMode)
|
| - , m_shouldSkipLeadingNewline(false)
|
| - , m_parser(parser)
|
| - , m_scriptToProcessStartPosition(uninitializedPositionValue1())
|
| - , m_options(options)
|
| + : HTMLTreeBuilder(parser, fragment->document(), parserContentPolicy, options)
|
| {
|
| ASSERT(isMainThread());
|
| ASSERT(contextElement);
|
| + m_tree.initFragmentParsing(fragment);
|
| + m_fragmentContext.init(fragment, contextElement);
|
|
|
| // Steps 4.2-4.6 of the HTML5 Fragment Case parsing algorithm:
|
| // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#fragment-case
|
| @@ -318,6 +307,20 @@ HTMLTreeBuilder::~HTMLTreeBuilder()
|
| {
|
| }
|
|
|
| +void HTMLTreeBuilder::FragmentParsingContext::init(DocumentFragment* fragment, Element* contextElement)
|
| +{
|
| + DCHECK(fragment);
|
| + DCHECK(!fragment->hasChildren());
|
| + m_fragment = fragment;
|
| + m_contextElementStackItem = HTMLStackItem::create(contextElement, HTMLStackItem::ItemForContextElement);
|
| +}
|
| +
|
| +DEFINE_TRACE(HTMLTreeBuilder::FragmentParsingContext)
|
| +{
|
| + visitor->trace(m_fragment);
|
| + visitor->trace(m_contextElementStackItem);
|
| +}
|
| +
|
| DEFINE_TRACE(HTMLTreeBuilder)
|
| {
|
| visitor->trace(m_fragmentContext);
|
| @@ -338,28 +341,6 @@ void HTMLTreeBuilder::detach()
|
| m_tree.detach();
|
| }
|
|
|
| -HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext()
|
| - : m_fragment(nullptr)
|
| -{
|
| -}
|
| -
|
| -HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext(DocumentFragment* fragment, Element* contextElement)
|
| - : m_fragment(fragment)
|
| -{
|
| - ASSERT(!fragment->hasChildren());
|
| - m_contextElementStackItem = HTMLStackItem::create(contextElement, HTMLStackItem::ItemForContextElement);
|
| -}
|
| -
|
| -HTMLTreeBuilder::FragmentParsingContext::~FragmentParsingContext()
|
| -{
|
| -}
|
| -
|
| -DEFINE_TRACE(HTMLTreeBuilder::FragmentParsingContext)
|
| -{
|
| - visitor->trace(m_fragment);
|
| - visitor->trace(m_contextElementStackItem);
|
| -}
|
| -
|
| Element* HTMLTreeBuilder::takeScriptToProcess(TextPosition& scriptStartPosition)
|
| {
|
| ASSERT(m_scriptToProcess);
|
| @@ -2135,7 +2116,7 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken* token)
|
| case InFramesetMode:
|
| ASSERT(getInsertionMode() == InFramesetMode);
|
| if (token->name() == framesetTag) {
|
| - bool ignoreFramesetForFragmentParsing = m_tree.currentIsRootNode();
|
| + bool ignoreFramesetForFragmentParsing = m_tree.currentIsRootNode();
|
| ignoreFramesetForFragmentParsing = ignoreFramesetForFragmentParsing || m_tree.openElements()->hasTemplateInHTMLScope();
|
| if (ignoreFramesetForFragmentParsing) {
|
| ASSERT(isParsingFragmentOrTemplateContents());
|
|
|