Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Unified Diff: Source/core/html/parser/HTMLTreeBuilder.cpp

Issue 68893014: Allocate stack item for fragment context elements once (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Get rid of PassRefPtr Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/html/parser/HTMLTreeBuilder.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/parser/HTMLTreeBuilder.cpp
diff --git a/Source/core/html/parser/HTMLTreeBuilder.cpp b/Source/core/html/parser/HTMLTreeBuilder.cpp
index 0553f7384f9054e234ed2df991d0f728c1e81317..77d6d24fc9225381237eb8f9d2d28d1f895baf61 100644
--- a/Source/core/html/parser/HTMLTreeBuilder.cpp
+++ b/Source/core/html/parser/HTMLTreeBuilder.cpp
@@ -340,15 +340,14 @@ void HTMLTreeBuilder::detach()
HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext()
: m_fragment(0)
- , m_contextElement(0)
{
}
HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext(DocumentFragment* fragment, Element* contextElement)
: m_fragment(fragment)
- , m_contextElement(contextElement)
{
ASSERT(!fragment->hasChildNodes());
+ m_contextElementStackItem = HTMLStackItem::create(contextElement, HTMLStackItem::ItemForContextElement);
}
HTMLTreeBuilder::FragmentParsingContext::~FragmentParsingContext()
@@ -378,10 +377,10 @@ void HTMLTreeBuilder::constructTree(AtomicHTMLToken* token)
if (m_parser->tokenizer()) {
bool inForeignContent = false;
if (!m_tree.isEmpty()) {
- RefPtr<HTMLStackItem> adjustedCurrentNode = adjustedCurrentStackItem();
+ HTMLStackItem* adjustedCurrentNode = adjustedCurrentStackItem();
inForeignContent = !adjustedCurrentNode->isInHTMLNamespace()
- && !HTMLElementStack::isHTMLIntegrationPoint(adjustedCurrentNode.get())
- && !HTMLElementStack::isMathMLTextIntegrationPoint(adjustedCurrentNode.get());
+ && !HTMLElementStack::isHTMLIntegrationPoint(adjustedCurrentNode)
+ && !HTMLElementStack::isMathMLTextIntegrationPoint(adjustedCurrentNode);
}
m_parser->tokenizer()->setForceNullCharacterReplacement(m_insertionMode == TextMode || inForeignContent);
@@ -1003,11 +1002,11 @@ bool HTMLTreeBuilder::processColgroupEndTagForInColumnGroup()
}
// http://www.whatwg.org/specs/web-apps/current-work/#adjusted-current-node
-PassRefPtr<HTMLStackItem> HTMLTreeBuilder::adjustedCurrentStackItem() const
+HTMLStackItem* HTMLTreeBuilder::adjustedCurrentStackItem() const
{
ASSERT(!m_tree.isEmpty());
if (isParsingFragment() && m_tree.openElements()->hasOnlyOneElement())
- return HTMLStackItem::create(m_fragmentContext.contextElement(), HTMLStackItem::ItemForContextElement);
+ return m_fragmentContext.contextElementStackItem();
return m_tree.currentStackItem();
}
@@ -1624,7 +1623,7 @@ void HTMLTreeBuilder::resetInsertionModeAppropriately()
if (item->node() == m_tree.openElements()->rootNode()) {
last = true;
if (isParsingFragment())
- item = HTMLStackItem::create(m_fragmentContext.contextElement(), HTMLStackItem::ItemForContextElement);
+ item = m_fragmentContext.contextElementStackItem();
}
if (item->hasTagName(templateTag))
return setInsertionMode(m_templateInsertionModes.last());
@@ -2692,11 +2691,11 @@ bool HTMLTreeBuilder::shouldProcessTokenInForeignContent(AtomicHTMLToken* token)
{
if (m_tree.isEmpty())
return false;
- RefPtr<HTMLStackItem> adjustedCurrentNode = adjustedCurrentStackItem();
+ HTMLStackItem* adjustedCurrentNode = adjustedCurrentStackItem();
if (adjustedCurrentNode->isInHTMLNamespace())
return false;
- if (HTMLElementStack::isMathMLTextIntegrationPoint(adjustedCurrentNode.get())) {
+ if (HTMLElementStack::isMathMLTextIntegrationPoint(adjustedCurrentNode)) {
if (token->type() == HTMLToken::StartTag
&& token->name() != MathMLNames::mglyphTag
&& token->name() != MathMLNames::malignmarkTag)
@@ -2708,7 +2707,7 @@ bool HTMLTreeBuilder::shouldProcessTokenInForeignContent(AtomicHTMLToken* token)
&& token->type() == HTMLToken::StartTag
&& token->name() == SVGNames::svgTag)
return false;
- if (HTMLElementStack::isHTMLIntegrationPoint(adjustedCurrentNode.get())) {
+ if (HTMLElementStack::isHTMLIntegrationPoint(adjustedCurrentNode)) {
if (token->type() == HTMLToken::StartTag)
return false;
if (token->type() == HTMLToken::Character)
@@ -2730,7 +2729,7 @@ void HTMLTreeBuilder::processTokenInForeignContent(AtomicHTMLToken* token)
}
m_tree.flush();
- RefPtr<HTMLStackItem> adjustedCurrentNode = adjustedCurrentStackItem();
+ HTMLStackItem* adjustedCurrentNode = adjustedCurrentStackItem();
switch (token->type()) {
case HTMLToken::Uninitialized:
« no previous file with comments | « Source/core/html/parser/HTMLTreeBuilder.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698