<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[208776] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/208776">208776</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2016-11-15 17:16:31 -0800 (Tue, 15 Nov 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Avoid copying vector of attributes as much as possible in the HTML parser
https://bugs.webkit.org/show_bug.cgi?id=164778

Reviewed by Ryosuke Niwa.

Avoid copying vector of attributes as much as possible in the HTML parser by moving
AtomicHTMLToken around and making it obvious it is safe to move its attributes
vector as well.

No new tests, no Web-exposed behavior change.

* html/parser/AtomicHTMLToken.h:
(WebCore::AtomicHTMLToken::AtomicHTMLToken):
(WebCore::findAttribute):
* html/parser/HTMLConstructionSite.cpp:
(WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
(WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement):
(WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody):
(WebCore::HTMLConstructionSite::insertHTMLBodyStartTagInBody):
(WebCore::HTMLConstructionSite::insertDoctype):
(WebCore::HTMLConstructionSite::insertComment):
(WebCore::HTMLConstructionSite::insertCommentOnDocument):
(WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
(WebCore::HTMLConstructionSite::insertHTMLHeadElement):
(WebCore::HTMLConstructionSite::insertHTMLBodyElement):
(WebCore::HTMLConstructionSite::insertHTMLFormElement):
(WebCore::HTMLConstructionSite::insertHTMLElement):
(WebCore::HTMLConstructionSite::insertHTMLElementOrFindCustomElementInterface):
(WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):
(WebCore::HTMLConstructionSite::insertFormattingElement):
(WebCore::HTMLConstructionSite::insertScriptElement):
(WebCore::HTMLConstructionSite::insertForeignElement):
(WebCore::HTMLConstructionSite::createHTMLElementOrFindCustomElementInterface):
(WebCore::HTMLConstructionSite::createElementFromSavedToken):
* html/parser/HTMLConstructionSite.h:
* html/parser/HTMLDocumentParser.cpp:
(WebCore::HTMLDocumentParser::constructTreeFromHTMLToken):
* html/parser/HTMLStackItem.h:
(WebCore::HTMLStackItem::HTMLStackItem):
(WebCore::HTMLStackItem::create):
* html/parser/HTMLTreeBuilder.cpp:
(WebCore::CustomElementConstructionData::CustomElementConstructionData):
(WebCore::HTMLTreeBuilder::constructTree):
(WebCore::HTMLTreeBuilder::processToken):
(WebCore::HTMLTreeBuilder::processDoctypeToken):
(WebCore::HTMLTreeBuilder::processFakeStartTag):
(WebCore::HTMLTreeBuilder::processFakeEndTag):
(WebCore::HTMLTreeBuilder::processFakePEndTagIfPInButtonScope):
(WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
(WebCore::HTMLTreeBuilder::processStartTagForInBody):
(WebCore::HTMLTreeBuilder::insertGenericHTMLElement):
(WebCore::HTMLTreeBuilder::processTemplateStartTag):
(WebCore::HTMLTreeBuilder::processTemplateEndTag):
(WebCore::HTMLTreeBuilder::processEndOfFileForInTemplateContents):
(WebCore::HTMLTreeBuilder::processStartTagForInTable):
(WebCore::HTMLTreeBuilder::processStartTag):
(WebCore::HTMLTreeBuilder::processHtmlStartTagForInBody):
(WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
(WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
(WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
(WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
(WebCore::HTMLTreeBuilder::processEndTagForInRow):
(WebCore::HTMLTreeBuilder::processEndTagForInCell):
(WebCore::HTMLTreeBuilder::processEndTagForInBody):
(WebCore::HTMLTreeBuilder::processEndTagForInTable):
(WebCore::HTMLTreeBuilder::processEndTag):
(WebCore::HTMLTreeBuilder::processComment):
(WebCore::HTMLTreeBuilder::processCharacter):
(WebCore::HTMLTreeBuilder::processEndOfFile):
(WebCore::HTMLTreeBuilder::defaultForBeforeHTML):
(WebCore::HTMLTreeBuilder::defaultForBeforeHead):
(WebCore::HTMLTreeBuilder::defaultForInHead):
(WebCore::HTMLTreeBuilder::defaultForInHeadNoscript):
(WebCore::HTMLTreeBuilder::defaultForAfterHead):
(WebCore::HTMLTreeBuilder::processStartTagForInHead):
(WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
(WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
(WebCore::HTMLTreeBuilder::processScriptStartTag):
(WebCore::HTMLTreeBuilder::shouldProcessTokenInForeignContent):
(WebCore::hasAttribute):
(WebCore::HTMLTreeBuilder::processTokenInForeignContent):
(WebCore::HTMLTreeBuilder::parseError):
* html/parser/HTMLTreeBuilder.h:
* html/parser/TextDocumentParser.cpp:
(WebCore::TextDocumentParser::insertFakePreElement):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorehtmlparserAtomicHTMLTokenh">trunk/Source/WebCore/html/parser/AtomicHTMLToken.h</a></li>
<li><a href="#trunkSourceWebCorehtmlparserHTMLConstructionSitecpp">trunk/Source/WebCore/html/parser/HTMLConstructionSite.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlparserHTMLConstructionSiteh">trunk/Source/WebCore/html/parser/HTMLConstructionSite.h</a></li>
<li><a href="#trunkSourceWebCorehtmlparserHTMLDocumentParsercpp">trunk/Source/WebCore/html/parser/HTMLDocumentParser.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlparserHTMLStackItemh">trunk/Source/WebCore/html/parser/HTMLStackItem.h</a></li>
<li><a href="#trunkSourceWebCorehtmlparserHTMLTreeBuildercpp">trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlparserHTMLTreeBuilderh">trunk/Source/WebCore/html/parser/HTMLTreeBuilder.h</a></li>
<li><a href="#trunkSourceWebCorehtmlparserTextDocumentParsercpp">trunk/Source/WebCore/html/parser/TextDocumentParser.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (208775 => 208776)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-11-16 01:06:57 UTC (rev 208775)
+++ trunk/Source/WebCore/ChangeLog        2016-11-16 01:16:31 UTC (rev 208776)
</span><span class="lines">@@ -1,3 +1,91 @@
</span><ins>+2016-11-15  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Avoid copying vector of attributes as much as possible in the HTML parser
+        https://bugs.webkit.org/show_bug.cgi?id=164778
+
+        Reviewed by Ryosuke Niwa.
+
+        Avoid copying vector of attributes as much as possible in the HTML parser by moving
+        AtomicHTMLToken around and making it obvious it is safe to move its attributes
+        vector as well.
+
+        No new tests, no Web-exposed behavior change.
+
+        * html/parser/AtomicHTMLToken.h:
+        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
+        (WebCore::findAttribute):
+        * html/parser/HTMLConstructionSite.cpp:
+        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
+        (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement):
+        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody):
+        (WebCore::HTMLConstructionSite::insertHTMLBodyStartTagInBody):
+        (WebCore::HTMLConstructionSite::insertDoctype):
+        (WebCore::HTMLConstructionSite::insertComment):
+        (WebCore::HTMLConstructionSite::insertCommentOnDocument):
+        (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
+        (WebCore::HTMLConstructionSite::insertHTMLHeadElement):
+        (WebCore::HTMLConstructionSite::insertHTMLBodyElement):
+        (WebCore::HTMLConstructionSite::insertHTMLFormElement):
+        (WebCore::HTMLConstructionSite::insertHTMLElement):
+        (WebCore::HTMLConstructionSite::insertHTMLElementOrFindCustomElementInterface):
+        (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):
+        (WebCore::HTMLConstructionSite::insertFormattingElement):
+        (WebCore::HTMLConstructionSite::insertScriptElement):
+        (WebCore::HTMLConstructionSite::insertForeignElement):
+        (WebCore::HTMLConstructionSite::createHTMLElementOrFindCustomElementInterface):
+        (WebCore::HTMLConstructionSite::createElementFromSavedToken):
+        * html/parser/HTMLConstructionSite.h:
+        * html/parser/HTMLDocumentParser.cpp:
+        (WebCore::HTMLDocumentParser::constructTreeFromHTMLToken):
+        * html/parser/HTMLStackItem.h:
+        (WebCore::HTMLStackItem::HTMLStackItem):
+        (WebCore::HTMLStackItem::create):
+        * html/parser/HTMLTreeBuilder.cpp:
+        (WebCore::CustomElementConstructionData::CustomElementConstructionData):
+        (WebCore::HTMLTreeBuilder::constructTree):
+        (WebCore::HTMLTreeBuilder::processToken):
+        (WebCore::HTMLTreeBuilder::processDoctypeToken):
+        (WebCore::HTMLTreeBuilder::processFakeStartTag):
+        (WebCore::HTMLTreeBuilder::processFakeEndTag):
+        (WebCore::HTMLTreeBuilder::processFakePEndTagIfPInButtonScope):
+        (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
+        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+        (WebCore::HTMLTreeBuilder::insertGenericHTMLElement):
+        (WebCore::HTMLTreeBuilder::processTemplateStartTag):
+        (WebCore::HTMLTreeBuilder::processTemplateEndTag):
+        (WebCore::HTMLTreeBuilder::processEndOfFileForInTemplateContents):
+        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
+        (WebCore::HTMLTreeBuilder::processStartTag):
+        (WebCore::HTMLTreeBuilder::processHtmlStartTagForInBody):
+        (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
+        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
+        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
+        (WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
+        (WebCore::HTMLTreeBuilder::processEndTagForInRow):
+        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
+        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
+        (WebCore::HTMLTreeBuilder::processEndTagForInTable):
+        (WebCore::HTMLTreeBuilder::processEndTag):
+        (WebCore::HTMLTreeBuilder::processComment):
+        (WebCore::HTMLTreeBuilder::processCharacter):
+        (WebCore::HTMLTreeBuilder::processEndOfFile):
+        (WebCore::HTMLTreeBuilder::defaultForBeforeHTML):
+        (WebCore::HTMLTreeBuilder::defaultForBeforeHead):
+        (WebCore::HTMLTreeBuilder::defaultForInHead):
+        (WebCore::HTMLTreeBuilder::defaultForInHeadNoscript):
+        (WebCore::HTMLTreeBuilder::defaultForAfterHead):
+        (WebCore::HTMLTreeBuilder::processStartTagForInHead):
+        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
+        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
+        (WebCore::HTMLTreeBuilder::processScriptStartTag):
+        (WebCore::HTMLTreeBuilder::shouldProcessTokenInForeignContent):
+        (WebCore::hasAttribute):
+        (WebCore::HTMLTreeBuilder::processTokenInForeignContent):
+        (WebCore::HTMLTreeBuilder::parseError):
+        * html/parser/HTMLTreeBuilder.h:
+        * html/parser/TextDocumentParser.cpp:
+        (WebCore::TextDocumentParser::insertFakePreElement):
+
</ins><span class="cx"> 2016-11-15  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix iOS API test assertion after r208534
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlparserAtomicHTMLTokenh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/parser/AtomicHTMLToken.h (208775 => 208776)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/parser/AtomicHTMLToken.h        2016-11-16 01:06:57 UTC (rev 208775)
+++ trunk/Source/WebCore/html/parser/AtomicHTMLToken.h        2016-11-16 01:16:31 UTC (rev 208776)
</span><span class="lines">@@ -33,8 +33,11 @@
</span><span class="cx"> class AtomicHTMLToken {
</span><span class="cx"> public:
</span><span class="cx">     explicit AtomicHTMLToken(HTMLToken&amp;);
</span><del>-    AtomicHTMLToken(HTMLToken::Type, const AtomicString&amp; name, Vector&lt;Attribute&gt;&amp;&amp; = Vector&lt;Attribute&gt;()); // Only StartTag or EndTag.
</del><ins>+    AtomicHTMLToken(HTMLToken::Type, const AtomicString&amp; name, Vector&lt;Attribute&gt;&amp;&amp; = { }); // Only StartTag or EndTag.
</ins><span class="cx"> 
</span><ins>+    AtomicHTMLToken(const AtomicHTMLToken&amp;) = delete;
+    AtomicHTMLToken(AtomicHTMLToken&amp;&amp;) = default;
+
</ins><span class="cx">     HTMLToken::Type type() const;
</span><span class="cx"> 
</span><span class="cx">     // StartTag, EndTag, DOCTYPE.
</span><span class="lines">@@ -88,7 +91,7 @@
</span><span class="cx">     Vector&lt;Attribute&gt; m_attributes; // StartTag, EndTag.
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-Attribute* findAttribute(Vector&lt;Attribute&gt;&amp;, const QualifiedName&amp;);
</del><ins>+const Attribute* findAttribute(const Vector&lt;Attribute&gt;&amp;, const QualifiedName&amp;);
</ins><span class="cx"> 
</span><span class="cx"> inline HTMLToken::Type AtomicHTMLToken::type() const
</span><span class="cx"> {
</span><span class="lines">@@ -169,7 +172,7 @@
</span><span class="cx">     return StringImpl::create8BitIfPossible(m_doctypeData-&gt;systemIdentifier);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline Attribute* findAttribute(Vector&lt;Attribute&gt;&amp; attributes, const QualifiedName&amp; name)
</del><ins>+inline const Attribute* findAttribute(const Vector&lt;Attribute&gt;&amp; attributes, const QualifiedName&amp; name)
</ins><span class="cx"> {
</span><span class="cx">     for (auto&amp; attribute : attributes) {
</span><span class="cx">         if (attribute.name().matches(name))
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlparserHTMLConstructionSitecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/parser/HTMLConstructionSite.cpp (208775 => 208776)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/parser/HTMLConstructionSite.cpp        2016-11-16 01:06:57 UTC (rev 208775)
+++ trunk/Source/WebCore/html/parser/HTMLConstructionSite.cpp        2016-11-16 01:16:31 UTC (rev 208776)
</span><span class="lines">@@ -46,6 +46,7 @@
</span><span class="cx"> #include &quot;HTMLScriptElement.h&quot;
</span><span class="cx"> #include &quot;HTMLTemplateElement.h&quot;
</span><span class="cx"> #include &quot;HTMLUnknownElement.h&quot;
</span><ins>+#include &quot;JSCustomElementInterface.h&quot;
</ins><span class="cx"> #include &quot;NotImplemented.h&quot;
</span><span class="cx"> #include &quot;SVGElement.h&quot;
</span><span class="cx"> #include &quot;Text.h&quot;
</span><span class="lines">@@ -258,12 +259,12 @@
</span><span class="cx">         frame-&gt;injectUserScripts(InjectAtDocumentStart);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     auto element = HTMLHtmlElement::create(m_document);
</span><span class="cx">     setAttributes(element, token, m_parserContentPolicy);
</span><span class="cx">     attachLater(m_attachmentRoot, element.copyRef());
</span><del>-    m_openElements.pushHTMLHtmlElement(HTMLStackItem::create(element.copyRef(), token));
</del><ins>+    m_openElements.pushHTMLHtmlElement(HTMLStackItem::create(element.copyRef(), WTFMove(token)));
</ins><span class="cx"> 
</span><span class="cx">     executeQueuedTasks();
</span><span class="cx">     element-&gt;insertedByParser();
</span><span class="lines">@@ -270,7 +271,7 @@
</span><span class="cx">     dispatchDocumentElementAvailableIfNeeded();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::mergeAttributesFromTokenIntoElement(AtomicHTMLToken&amp; token, Element&amp; element)
</del><ins>+void HTMLConstructionSite::mergeAttributesFromTokenIntoElement(AtomicHTMLToken&amp;&amp; token, Element&amp; element)
</ins><span class="cx"> {
</span><span class="cx">     if (token.attributes().isEmpty())
</span><span class="cx">         return;
</span><span class="lines">@@ -281,7 +282,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::insertHTMLHtmlStartTagInBody(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLConstructionSite::insertHTMLHtmlStartTagInBody(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     // Fragments do not have a root HTML element, so any additional HTML elements
</span><span class="cx">     // encountered during fragment parsing should be ignored.
</span><span class="lines">@@ -288,12 +289,12 @@
</span><span class="cx">     if (m_isParsingFragment)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    mergeAttributesFromTokenIntoElement(token, m_openElements.htmlElement());
</del><ins>+    mergeAttributesFromTokenIntoElement(WTFMove(token), m_openElements.htmlElement());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::insertHTMLBodyStartTagInBody(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLConstructionSite::insertHTMLBodyStartTagInBody(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><del>-    mergeAttributesFromTokenIntoElement(token, m_openElements.bodyElement());
</del><ins>+    mergeAttributesFromTokenIntoElement(WTFMove(token), m_openElements.bodyElement());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void HTMLConstructionSite::setDefaultCompatibilityMode()
</span><span class="lines">@@ -404,7 +405,7 @@
</span><span class="cx">     m_document.finishedParsing();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::insertDoctype(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLConstructionSite::insertDoctype(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::DOCTYPE);
</span><span class="cx"> 
</span><span class="lines">@@ -428,19 +429,19 @@
</span><span class="cx">         setCompatibilityModeFromDoctype(token.name(), publicId, systemId);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::insertComment(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLConstructionSite::insertComment(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::Comment);
</span><span class="cx">     attachLater(currentNode(), Comment::create(ownerDocumentForCurrentNode(), token.comment()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::insertCommentOnDocument(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLConstructionSite::insertCommentOnDocument(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::Comment);
</span><span class="cx">     attachLater(m_attachmentRoot, Comment::create(m_document, token.comment()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::insertCommentOnHTMLHtmlElement(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLConstructionSite::insertCommentOnHTMLHtmlElement(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::Comment);
</span><span class="cx">     ContainerNode&amp; parent = m_openElements.rootNode();
</span><span class="lines">@@ -447,46 +448,46 @@
</span><span class="cx">     attachLater(parent, Comment::create(parent.document(), token.comment()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::insertHTMLHeadElement(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLConstructionSite::insertHTMLHeadElement(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!shouldFosterParent());
</span><del>-    m_head = HTMLStackItem::create(createHTMLElement(token), token);
</del><ins>+    m_head = HTMLStackItem::create(createHTMLElement(token), WTFMove(token));
</ins><span class="cx">     attachLater(currentNode(), m_head-&gt;element());
</span><span class="cx">     m_openElements.pushHTMLHeadElement(*m_head);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::insertHTMLBodyElement(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLConstructionSite::insertHTMLBodyElement(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!shouldFosterParent());
</span><span class="cx">     auto body = createHTMLElement(token);
</span><span class="cx">     attachLater(currentNode(), body.copyRef());
</span><del>-    m_openElements.pushHTMLBodyElement(HTMLStackItem::create(WTFMove(body), token));
</del><ins>+    m_openElements.pushHTMLBodyElement(HTMLStackItem::create(WTFMove(body), WTFMove(token)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::insertHTMLFormElement(AtomicHTMLToken&amp; token, bool isDemoted)
</del><ins>+void HTMLConstructionSite::insertHTMLFormElement(AtomicHTMLToken&amp;&amp; token, bool isDemoted)
</ins><span class="cx"> {
</span><span class="cx">     auto element = createHTMLElement(token);
</span><span class="cx">     m_form = &amp;downcast&lt;HTMLFormElement&gt;(element.get());
</span><span class="cx">     m_form-&gt;setDemoted(isDemoted);
</span><span class="cx">     attachLater(currentNode(), *m_form);
</span><del>-    m_openElements.push(HTMLStackItem::create(*m_form, token));
</del><ins>+    m_openElements.push(HTMLStackItem::create(*m_form, WTFMove(token)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::insertHTMLElement(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLConstructionSite::insertHTMLElement(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     auto element = createHTMLElement(token);
</span><span class="cx">     attachLater(currentNode(), element.copyRef());
</span><del>-    m_openElements.push(HTMLStackItem::create(WTFMove(element), token));
</del><ins>+    m_openElements.push(HTMLStackItem::create(WTFMove(element), WTFMove(token)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSCustomElementInterface* HTMLConstructionSite::insertHTMLElementOrFindCustomElementInterface(AtomicHTMLToken&amp; token)
</del><ins>+std::unique_ptr&lt;CustomElementConstructionData&gt; HTMLConstructionSite::insertHTMLElementOrFindCustomElementInterface(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     JSCustomElementInterface* elementInterface = nullptr;
</span><span class="cx">     RefPtr&lt;Element&gt; element = createHTMLElementOrFindCustomElementInterface(token, &amp;elementInterface);
</span><span class="cx">     if (UNLIKELY(elementInterface))
</span><del>-        return elementInterface;
</del><ins>+        return std::make_unique&lt;CustomElementConstructionData&gt;(*elementInterface, token.name(), WTFMove(token.attributes()));
</ins><span class="cx">     attachLater(currentNode(), *element);
</span><del>-    m_openElements.push(HTMLStackItem::create(element.releaseNonNull(), token));
</del><ins>+    m_openElements.push(HTMLStackItem::create(element.releaseNonNull(), WTFMove(token)));
</ins><span class="cx">     return nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -497,7 +498,7 @@
</span><span class="cx">     m_openElements.push(HTMLStackItem::create(WTFMove(element), localName, WTFMove(attributes)));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::insertSelfClosingHTMLElement(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLConstructionSite::insertSelfClosingHTMLElement(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::StartTag);
</span><span class="cx">     // Normally HTMLElementStack is responsible for calling finishParsingChildren,
</span><span class="lines">@@ -508,17 +509,17 @@
</span><span class="cx">     // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#acknowledge-self-closing-flag
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::insertFormattingElement(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLConstructionSite::insertFormattingElement(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#the-stack-of-open-elements
</span><span class="cx">     // Possible active formatting elements include:
</span><span class="cx">     // a, b, big, code, em, font, i, nobr, s, small, strike, strong, tt, and u.
</span><span class="cx">     ASSERT(isFormattingTag(token.name()));
</span><del>-    insertHTMLElement(token);
</del><ins>+    insertHTMLElement(WTFMove(token));
</ins><span class="cx">     m_activeFormattingElements.append(currentStackItem());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::insertScriptElement(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLConstructionSite::insertScriptElement(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     // http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#already-started
</span><span class="cx">     // http://html5.org/specs/dom-parsing.html#dom-range-createcontextualfragment
</span><span class="lines">@@ -531,10 +532,10 @@
</span><span class="cx">     setAttributes(element, token, m_parserContentPolicy);
</span><span class="cx">     if (scriptingContentIsAllowed(m_parserContentPolicy))
</span><span class="cx">         attachLater(currentNode(), element.copyRef());
</span><del>-    m_openElements.push(HTMLStackItem::create(WTFMove(element), token));
</del><ins>+    m_openElements.push(HTMLStackItem::create(WTFMove(element), WTFMove(token)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLConstructionSite::insertForeignElement(AtomicHTMLToken&amp; token, const AtomicString&amp; namespaceURI)
</del><ins>+void HTMLConstructionSite::insertForeignElement(AtomicHTMLToken&amp;&amp; token, const AtomicString&amp; namespaceURI)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::StartTag);
</span><span class="cx">     notImplemented(); // parseError when xmlns or xmlns:xlink are wrong.
</span><span class="lines">@@ -543,7 +544,7 @@
</span><span class="cx">     if (scriptingContentIsAllowed(m_parserContentPolicy) || !toScriptElementIfPossible(element.ptr()))
</span><span class="cx">         attachLater(currentNode(), element.copyRef(), token.selfClosing());
</span><span class="cx">     if (!token.selfClosing())
</span><del>-        m_openElements.push(HTMLStackItem::create(WTFMove(element), token, namespaceURI));
</del><ins>+        m_openElements.push(HTMLStackItem::create(WTFMove(element), WTFMove(token), namespaceURI));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void HTMLConstructionSite::insertTextNode(const String&amp; characters, WhitespaceMode whitespaceMode)
</span><span class="lines">@@ -642,8 +643,7 @@
</span><span class="cx">     return currentNode().document();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RefPtr&lt;Element&gt; HTMLConstructionSite::createHTMLElementOrFindCustomElementInterface(
-    AtomicHTMLToken&amp; token, JSCustomElementInterface** customElementInterface)
</del><ins>+RefPtr&lt;Element&gt; HTMLConstructionSite::createHTMLElementOrFindCustomElementInterface(AtomicHTMLToken&amp; token, JSCustomElementInterface** customElementInterface)
</ins><span class="cx"> {
</span><span class="cx">     auto&amp; localName = token.name();
</span><span class="cx">     // FIXME: This can't use HTMLConstructionSite::createElement because we
</span><span class="lines">@@ -698,7 +698,7 @@
</span><span class="cx">     AtomicHTMLToken fakeToken(HTMLToken::StartTag, item.localName(), Vector&lt;Attribute&gt;(item.attributes()));
</span><span class="cx">     ASSERT(item.namespaceURI() == HTMLNames::xhtmlNamespaceURI);
</span><span class="cx">     ASSERT(isFormattingTag(item.localName()));
</span><del>-    return HTMLStackItem::create(createHTMLElement(fakeToken), fakeToken, item.namespaceURI());
</del><ins>+    return HTMLStackItem::create(createHTMLElement(fakeToken), WTFMove(fakeToken), item.namespaceURI());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> Optional&lt;unsigned&gt; HTMLConstructionSite::indexOfFirstUnopenFormattingElement() const
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlparserHTMLConstructionSiteh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/parser/HTMLConstructionSite.h (208775 => 208776)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/parser/HTMLConstructionSite.h        2016-11-16 01:06:57 UTC (rev 208775)
+++ trunk/Source/WebCore/html/parser/HTMLConstructionSite.h        2016-11-16 01:16:31 UTC (rev 208776)
</span><span class="lines">@@ -80,6 +80,7 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> class AtomicHTMLToken;
</span><ins>+struct CustomElementConstructionData;
</ins><span class="cx"> class Document;
</span><span class="cx"> class Element;
</span><span class="cx"> class HTMLFormElement;
</span><span class="lines">@@ -97,25 +98,25 @@
</span><span class="cx">     void setDefaultCompatibilityMode();
</span><span class="cx">     void finishedParsing();
</span><span class="cx"> 
</span><del>-    void insertDoctype(AtomicHTMLToken&amp;);
-    void insertComment(AtomicHTMLToken&amp;);
-    void insertCommentOnDocument(AtomicHTMLToken&amp;);
-    void insertCommentOnHTMLHtmlElement(AtomicHTMLToken&amp;);
-    void insertHTMLElement(AtomicHTMLToken&amp;);
-    JSCustomElementInterface* insertHTMLElementOrFindCustomElementInterface(AtomicHTMLToken&amp;);
</del><ins>+    void insertDoctype(AtomicHTMLToken&amp;&amp;);
+    void insertComment(AtomicHTMLToken&amp;&amp;);
+    void insertCommentOnDocument(AtomicHTMLToken&amp;&amp;);
+    void insertCommentOnHTMLHtmlElement(AtomicHTMLToken&amp;&amp;);
+    void insertHTMLElement(AtomicHTMLToken&amp;&amp;);
+    std::unique_ptr&lt;CustomElementConstructionData&gt; insertHTMLElementOrFindCustomElementInterface(AtomicHTMLToken&amp;&amp;);
</ins><span class="cx">     void insertCustomElement(Ref&lt;Element&gt;&amp;&amp;, const AtomicString&amp; localName, Vector&lt;Attribute&gt;&amp;&amp;);
</span><del>-    void insertSelfClosingHTMLElement(AtomicHTMLToken&amp;);
-    void insertFormattingElement(AtomicHTMLToken&amp;);
-    void insertHTMLHeadElement(AtomicHTMLToken&amp;);
-    void insertHTMLBodyElement(AtomicHTMLToken&amp;);
-    void insertHTMLFormElement(AtomicHTMLToken&amp;, bool isDemoted = false);
-    void insertScriptElement(AtomicHTMLToken&amp;);
</del><ins>+    void insertSelfClosingHTMLElement(AtomicHTMLToken&amp;&amp;);
+    void insertFormattingElement(AtomicHTMLToken&amp;&amp;);
+    void insertHTMLHeadElement(AtomicHTMLToken&amp;&amp;);
+    void insertHTMLBodyElement(AtomicHTMLToken&amp;&amp;);
+    void insertHTMLFormElement(AtomicHTMLToken&amp;&amp;, bool isDemoted = false);
+    void insertScriptElement(AtomicHTMLToken&amp;&amp;);
</ins><span class="cx">     void insertTextNode(const String&amp;, WhitespaceMode = WhitespaceUnknown);
</span><del>-    void insertForeignElement(AtomicHTMLToken&amp;, const AtomicString&amp; namespaceURI);
</del><ins>+    void insertForeignElement(AtomicHTMLToken&amp;&amp;, const AtomicString&amp; namespaceURI);
</ins><span class="cx"> 
</span><del>-    void insertHTMLHtmlStartTagBeforeHTML(AtomicHTMLToken&amp;);
-    void insertHTMLHtmlStartTagInBody(AtomicHTMLToken&amp;);
-    void insertHTMLBodyStartTagInBody(AtomicHTMLToken&amp;);
</del><ins>+    void insertHTMLHtmlStartTagBeforeHTML(AtomicHTMLToken&amp;&amp;);
+    void insertHTMLHtmlStartTagInBody(AtomicHTMLToken&amp;&amp;);
+    void insertHTMLBodyStartTagInBody(AtomicHTMLToken&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     void reparent(HTMLElementStack::ElementRecord&amp; newParent, HTMLElementStack::ElementRecord&amp; child);
</span><span class="cx">     void reparent(HTMLElementStack::ElementRecord&amp; newParent, HTMLStackItem&amp; child);
</span><span class="lines">@@ -190,7 +191,7 @@
</span><span class="cx">     Ref&lt;Element&gt; createHTMLElement(AtomicHTMLToken&amp;);
</span><span class="cx">     Ref&lt;Element&gt; createElement(AtomicHTMLToken&amp;, const AtomicString&amp; namespaceURI);
</span><span class="cx"> 
</span><del>-    void mergeAttributesFromTokenIntoElement(AtomicHTMLToken&amp;, Element&amp;);
</del><ins>+    void mergeAttributesFromTokenIntoElement(AtomicHTMLToken&amp;&amp;, Element&amp;);
</ins><span class="cx">     void dispatchDocumentElementAvailableIfNeeded();
</span><span class="cx"> 
</span><span class="cx">     Document&amp; m_document;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlparserHTMLDocumentParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/parser/HTMLDocumentParser.cpp (208775 => 208776)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/parser/HTMLDocumentParser.cpp        2016-11-16 01:06:57 UTC (rev 208775)
+++ trunk/Source/WebCore/html/parser/HTMLDocumentParser.cpp        2016-11-16 01:16:31 UTC (rev 208776)
</span><span class="lines">@@ -317,7 +317,7 @@
</span><span class="cx">         rawToken.clear();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    m_treeBuilder-&gt;constructTree(token);
</del><ins>+    m_treeBuilder-&gt;constructTree(WTFMove(token));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool HTMLDocumentParser::hasInsertionPoint()
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlparserHTMLStackItemh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/parser/HTMLStackItem.h (208775 => 208776)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/parser/HTMLStackItem.h        2016-11-16 01:06:57 UTC (rev 208775)
+++ trunk/Source/WebCore/html/parser/HTMLStackItem.h        2016-11-16 01:16:31 UTC (rev 208776)
</span><span class="lines">@@ -38,7 +38,7 @@
</span><span class="cx"> class HTMLStackItem : public RefCounted&lt;HTMLStackItem&gt; {
</span><span class="cx"> public:
</span><span class="cx">     // Normal HTMLElementStack and HTMLFormattingElementList items.
</span><del>-    static Ref&lt;HTMLStackItem&gt; create(Ref&lt;Element&gt;&amp;&amp;, AtomicHTMLToken&amp;, const AtomicString&amp; namespaceURI = HTMLNames::xhtmlNamespaceURI);
</del><ins>+    static Ref&lt;HTMLStackItem&gt; create(Ref&lt;Element&gt;&amp;&amp;, AtomicHTMLToken&amp;&amp;, const AtomicString&amp; namespaceURI = HTMLNames::xhtmlNamespaceURI);
</ins><span class="cx">     static Ref&lt;HTMLStackItem&gt; create(Ref&lt;Element&gt;&amp;&amp;, const AtomicString&amp;, Vector&lt;Attribute&gt;&amp;&amp;);
</span><span class="cx"> 
</span><span class="cx">     // Document fragment or element for parsing context.
</span><span class="lines">@@ -61,7 +61,7 @@
</span><span class="cx">     bool matchesHTMLTag(const AtomicString&amp;) const;
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    HTMLStackItem(Ref&lt;Element&gt;&amp;&amp;, AtomicHTMLToken&amp;, const AtomicString&amp; namespaceURI);
</del><ins>+    HTMLStackItem(Ref&lt;Element&gt;&amp;&amp;, AtomicHTMLToken&amp;&amp;, const AtomicString&amp; namespaceURI);
</ins><span class="cx">     HTMLStackItem(Ref&lt;Element&gt;&amp;&amp;, const AtomicString&amp; localName, const AtomicString&amp; namespaceURI, Vector&lt;Attribute&gt;&amp;&amp;);
</span><span class="cx">     explicit HTMLStackItem(Element&amp;);
</span><span class="cx">     explicit HTMLStackItem(DocumentFragment&amp;);
</span><span class="lines">@@ -76,18 +76,17 @@
</span><span class="cx"> bool isNumberedHeaderElement(const HTMLStackItem&amp;);
</span><span class="cx"> bool isSpecialNode(const HTMLStackItem&amp;);
</span><span class="cx"> 
</span><del>-inline HTMLStackItem::HTMLStackItem(Ref&lt;Element&gt;&amp;&amp; element, AtomicHTMLToken&amp; token, const AtomicString&amp; namespaceURI = HTMLNames::xhtmlNamespaceURI)
</del><ins>+inline HTMLStackItem::HTMLStackItem(Ref&lt;Element&gt;&amp;&amp; element, AtomicHTMLToken&amp;&amp; token, const AtomicString&amp; namespaceURI = HTMLNames::xhtmlNamespaceURI)
</ins><span class="cx">     : m_node(WTFMove(element))
</span><span class="cx">     , m_namespaceURI(namespaceURI)
</span><span class="cx">     , m_localName(token.name())
</span><del>-    , m_attributes(token.attributes())
</del><ins>+    , m_attributes(WTFMove(token.attributes()))
</ins><span class="cx"> {
</span><del>-    // FIXME: We should find a way to move the attributes vector in the normal code path instead of copying it.
</del><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline Ref&lt;HTMLStackItem&gt; HTMLStackItem::create(Ref&lt;Element&gt;&amp;&amp; element, AtomicHTMLToken&amp; token, const AtomicString&amp; namespaceURI)
</del><ins>+inline Ref&lt;HTMLStackItem&gt; HTMLStackItem::create(Ref&lt;Element&gt;&amp;&amp; element, AtomicHTMLToken&amp;&amp; token, const AtomicString&amp; namespaceURI)
</ins><span class="cx"> {
</span><del>-    return adoptRef(*new HTMLStackItem(WTFMove(element), token, namespaceURI));
</del><ins>+    return adoptRef(*new HTMLStackItem(WTFMove(element), WTFMove(token), namespaceURI));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> inline HTMLStackItem::HTMLStackItem(Ref&lt;Element&gt;&amp;&amp; element, const AtomicString&amp; localName, const AtomicString&amp; namespaceURI, Vector&lt;Attribute&gt;&amp;&amp; attributes)
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlparserHTMLTreeBuildercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp (208775 => 208776)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp        2016-11-16 01:06:57 UTC (rev 208775)
+++ trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp        2016-11-16 01:16:31 UTC (rev 208776)
</span><span class="lines">@@ -53,10 +53,10 @@
</span><span class="cx"> 
</span><span class="cx"> using namespace HTMLNames;
</span><span class="cx"> 
</span><del>-CustomElementConstructionData::CustomElementConstructionData(Ref&lt;JSCustomElementInterface&gt;&amp;&amp; customElementInterface, const AtomicString&amp; name, const Vector&lt;Attribute&gt;&amp; attributes)
</del><ins>+CustomElementConstructionData::CustomElementConstructionData(Ref&lt;JSCustomElementInterface&gt;&amp;&amp; customElementInterface, const AtomicString&amp; name, Vector&lt;Attribute&gt;&amp;&amp; attributes)
</ins><span class="cx">     : elementInterface(WTFMove(customElementInterface))
</span><span class="cx">     , name(name)
</span><del>-    , attributes(attributes) // FIXME: Avoid copying attributes.
</del><ins>+    , attributes(WTFMove(attributes))
</ins><span class="cx"> { }
</span><span class="cx"> 
</span><span class="cx"> CustomElementConstructionData::~CustomElementConstructionData()
</span><span class="lines">@@ -333,7 +333,7 @@
</span><span class="cx">     return WTFMove(m_scriptToProcess);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::constructTree(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::constructTree(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx"> #if !ASSERT_DISABLED
</span><span class="cx">     ASSERT(!m_destroyed);
</span><span class="lines">@@ -342,9 +342,9 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     if (shouldProcessTokenInForeignContent(token))
</span><del>-        processTokenInForeignContent(token);
</del><ins>+        processTokenInForeignContent(WTFMove(token));
</ins><span class="cx">     else
</span><del>-        processToken(token);
</del><ins>+        processToken(WTFMove(token));
</ins><span class="cx"> 
</span><span class="cx">     bool inForeignContent = !m_tree.isEmpty()
</span><span class="cx">         &amp;&amp; !isInHTMLNamespace(adjustedCurrentStackItem())
</span><span class="lines">@@ -362,7 +362,7 @@
</span><span class="cx">     // The tree builder might have been destroyed as an indirect result of executing the queued tasks.
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processToken(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processToken(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     switch (token.type()) {
</span><span class="cx">     case HTMLToken::Uninitialized:
</span><span class="lines">@@ -370,41 +370,41 @@
</span><span class="cx">         break;
</span><span class="cx">     case HTMLToken::DOCTYPE:
</span><span class="cx">         m_shouldSkipLeadingNewline = false;
</span><del>-        processDoctypeToken(token);
</del><ins>+        processDoctypeToken(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case HTMLToken::StartTag:
</span><span class="cx">         m_shouldSkipLeadingNewline = false;
</span><del>-        processStartTag(token);
</del><ins>+        processStartTag(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case HTMLToken::EndTag:
</span><span class="cx">         m_shouldSkipLeadingNewline = false;
</span><del>-        processEndTag(token);
</del><ins>+        processEndTag(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case HTMLToken::Comment:
</span><span class="cx">         m_shouldSkipLeadingNewline = false;
</span><del>-        processComment(token);
</del><ins>+        processComment(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     case HTMLToken::Character:
</span><del>-        processCharacter(token);
</del><ins>+        processCharacter(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case HTMLToken::EndOfFile:
</span><span class="cx">         m_shouldSkipLeadingNewline = false;
</span><del>-        processEndOfFile(token);
</del><ins>+        processEndOfFile(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processDoctypeToken(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processDoctypeToken(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::DOCTYPE);
</span><span class="cx">     if (m_insertionMode == InsertionMode::Initial) {
</span><del>-        m_tree.insertDoctype(token);
</del><ins>+        m_tree.insertDoctype(WTFMove(token));
</ins><span class="cx">         m_insertionMode = InsertionMode::BeforeHTML;
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (m_insertionMode == InsertionMode::InTableText) {
</span><span class="cx">         defaultForInTableText();
</span><del>-        processDoctypeToken(token);
</del><ins>+        processDoctypeToken(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     parseError(token);
</span><span class="lines">@@ -414,13 +414,13 @@
</span><span class="cx"> {
</span><span class="cx">     // FIXME: We'll need a fancier conversion than just &quot;localName&quot; for SVG/MathML tags.
</span><span class="cx">     AtomicHTMLToken fakeToken(HTMLToken::StartTag, tagName.localName(), WTFMove(attributes));
</span><del>-    processStartTag(fakeToken);
</del><ins>+    processStartTag(WTFMove(fakeToken));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void HTMLTreeBuilder::processFakeEndTag(const AtomicString&amp; tagName)
</span><span class="cx"> {
</span><span class="cx">     AtomicHTMLToken fakeToken(HTMLToken::EndTag, tagName);
</span><del>-    processEndTag(fakeToken);
</del><ins>+    processEndTag(WTFMove(fakeToken));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void HTMLTreeBuilder::processFakeEndTag(const QualifiedName&amp; tagName)
</span><span class="lines">@@ -441,7 +441,7 @@
</span><span class="cx">     if (!m_tree.openElements().inButtonScope(pTag.localName()))
</span><span class="cx">         return;
</span><span class="cx">     AtomicHTMLToken endP(HTMLToken::EndTag, pTag.localName());
</span><del>-    processEndTag(endP);
</del><ins>+    processEndTag(WTFMove(endP));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> namespace {
</span><span class="lines">@@ -458,7 +458,7 @@
</span><span class="cx"> 
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template &lt;bool shouldClose(const HTMLStackItem&amp;)&gt; void HTMLTreeBuilder::processCloseWhenNestedTag(AtomicHTMLToken&amp; token)
</del><ins>+template &lt;bool shouldClose(const HTMLStackItem&amp;)&gt; void HTMLTreeBuilder::processCloseWhenNestedTag(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     m_framesetOk = false;
</span><span class="cx">     for (auto* nodeRecord = &amp;m_tree.openElements().topRecord(); ; nodeRecord = nodeRecord-&gt;next()) {
</span><span class="lines">@@ -472,7 +472,7 @@
</span><span class="cx">             break;
</span><span class="cx">     }
</span><span class="cx">     processFakePEndTagIfPInButtonScope();
</span><del>-    m_tree.insertHTMLElement(token);
</del><ins>+    m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template &lt;typename TableQualifiedName&gt; static HashMap&lt;AtomicString, QualifiedName&gt; createCaseMap(const TableQualifiedName* const names[], unsigned length)
</span><span class="lines">@@ -551,11 +551,11 @@
</span><span class="cx">     adjustAttributes(map, token);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processStartTagForInBody(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processStartTagForInBody(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::StartTag);
</span><span class="cx">     if (token.name() == htmlTag) {
</span><del>-        processHtmlStartTagForInBody(token);
</del><ins>+        processHtmlStartTagForInBody(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == baseTag
</span><span class="lines">@@ -568,7 +568,7 @@
</span><span class="cx">         || token.name() == scriptTag
</span><span class="cx">         || token.name() == styleTag
</span><span class="cx">         || token.name() == titleTag) {
</span><del>-        bool didProcess = processStartTagForInHead(token);
</del><ins>+        bool didProcess = processStartTagForInHead(WTFMove(token));
</ins><span class="cx">         ASSERT_UNUSED(didProcess, didProcess);
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="lines">@@ -581,7 +581,7 @@
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         m_framesetOk = false;
</span><del>-        m_tree.insertHTMLBodyStartTagInBody(token);
</del><ins>+        m_tree.insertHTMLBodyStartTagInBody(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == framesetTag) {
</span><span class="lines">@@ -596,7 +596,7 @@
</span><span class="cx">         m_tree.openElements().popUntil(m_tree.openElements().bodyElement());
</span><span class="cx">         m_tree.openElements().popHTMLBodyElement();
</span><span class="cx">         ASSERT(&amp;m_tree.openElements().top() == &amp;m_tree.openElements().htmlElement());
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         m_insertionMode = InsertionMode::InFrameset;
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="lines">@@ -624,7 +624,7 @@
</span><span class="cx">         || token.name() == summaryTag
</span><span class="cx">         || token.name() == ulTag) {
</span><span class="cx">         processFakePEndTagIfPInButtonScope();
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (isNumberedHeaderTag(token.name())) {
</span><span class="lines">@@ -633,12 +633,12 @@
</span><span class="cx">             parseError(token);
</span><span class="cx">             m_tree.openElements().pop();
</span><span class="cx">         }
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == preTag || token.name() == listingTag) {
</span><span class="cx">         processFakePEndTagIfPInButtonScope();
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         m_shouldSkipLeadingNewline = true;
</span><span class="cx">         m_framesetOk = false;
</span><span class="cx">         return;
</span><span class="lines">@@ -649,20 +649,20 @@
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         processFakePEndTagIfPInButtonScope();
</span><del>-        m_tree.insertHTMLFormElement(token);
</del><ins>+        m_tree.insertHTMLFormElement(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == liTag) {
</span><del>-        processCloseWhenNestedTag&lt;isLi&gt;(token);
</del><ins>+        processCloseWhenNestedTag&lt;isLi&gt;(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == ddTag || token.name() == dtTag) {
</span><del>-        processCloseWhenNestedTag&lt;isDdOrDt&gt;(token);
</del><ins>+        processCloseWhenNestedTag&lt;isDdOrDt&gt;(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == plaintextTag) {
</span><span class="cx">         processFakePEndTagIfPInButtonScope();
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         m_parser.tokenizer().setPLAINTEXTState();
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="lines">@@ -670,11 +670,11 @@
</span><span class="cx">         if (m_tree.openElements().inScope(buttonTag)) {
</span><span class="cx">             parseError(token);
</span><span class="cx">             processFakeEndTag(buttonTag);
</span><del>-            processStartTag(token); // FIXME: Could we just fall through here?
</del><ins>+            processStartTag(WTFMove(token)); // FIXME: Could we just fall through here?
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         m_tree.reconstructTheActiveFormattingElements();
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         m_framesetOk = false;
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="lines">@@ -688,12 +688,12 @@
</span><span class="cx">                 m_tree.openElements().remove(*activeATag);
</span><span class="cx">         }
</span><span class="cx">         m_tree.reconstructTheActiveFormattingElements();
</span><del>-        m_tree.insertFormattingElement(token);
</del><ins>+        m_tree.insertFormattingElement(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (isNonAnchorNonNobrFormattingTag(token.name())) {
</span><span class="cx">         m_tree.reconstructTheActiveFormattingElements();
</span><del>-        m_tree.insertFormattingElement(token);
</del><ins>+        m_tree.insertFormattingElement(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == nobrTag) {
</span><span class="lines">@@ -703,7 +703,7 @@
</span><span class="cx">             processFakeEndTag(nobrTag);
</span><span class="cx">             m_tree.reconstructTheActiveFormattingElements();
</span><span class="cx">         }
</span><del>-        m_tree.insertFormattingElement(token);
</del><ins>+        m_tree.insertFormattingElement(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == appletTag || token.name() == embedTag || token.name() == objectTag) {
</span><span class="lines">@@ -712,7 +712,7 @@
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == appletTag || token.name() == marqueeTag || token.name() == objectTag) {
</span><span class="cx">         m_tree.reconstructTheActiveFormattingElements();
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         m_tree.activeFormattingElements().appendMarker();
</span><span class="cx">         m_framesetOk = false;
</span><span class="cx">         return;
</span><span class="lines">@@ -720,7 +720,7 @@
</span><span class="cx">     if (token.name() == tableTag) {
</span><span class="cx">         if (!m_tree.inQuirksMode() &amp;&amp; m_tree.openElements().inButtonScope(pTag))
</span><span class="cx">             processFakeEndTag(pTag);
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         m_framesetOk = false;
</span><span class="cx">         m_insertionMode = InsertionMode::InTable;
</span><span class="cx">         return;
</span><span class="lines">@@ -738,30 +738,31 @@
</span><span class="cx">         || token.name() == keygenTag
</span><span class="cx">         || token.name() == wbrTag) {
</span><span class="cx">         m_tree.reconstructTheActiveFormattingElements();
</span><del>-        m_tree.insertSelfClosingHTMLElement(token);
</del><ins>+        m_tree.insertSelfClosingHTMLElement(WTFMove(token));
</ins><span class="cx">         m_framesetOk = false;
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == inputTag) {
</span><span class="cx">         m_tree.reconstructTheActiveFormattingElements();
</span><del>-        m_tree.insertSelfClosingHTMLElement(token);
-        Attribute* typeAttribute = findAttribute(token.attributes(), typeAttr);
-        if (!typeAttribute || !equalLettersIgnoringASCIICase(typeAttribute-&gt;value(), &quot;hidden&quot;))
</del><ins>+        auto* typeAttribute = findAttribute(token.attributes(), typeAttr);
+        bool shouldClearFramesetOK = !typeAttribute || !equalLettersIgnoringASCIICase(typeAttribute-&gt;value(), &quot;hidden&quot;);
+        m_tree.insertSelfClosingHTMLElement(WTFMove(token));
+        if (shouldClearFramesetOK)
</ins><span class="cx">             m_framesetOk = false;
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == paramTag || token.name() == sourceTag || token.name() == trackTag) {
</span><del>-        m_tree.insertSelfClosingHTMLElement(token);
</del><ins>+        m_tree.insertSelfClosingHTMLElement(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == hrTag) {
</span><span class="cx">         processFakePEndTagIfPInButtonScope();
</span><del>-        m_tree.insertSelfClosingHTMLElement(token);
</del><ins>+        m_tree.insertSelfClosingHTMLElement(WTFMove(token));
</ins><span class="cx">         m_framesetOk = false;
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == textareaTag) {
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         m_shouldSkipLeadingNewline = true;
</span><span class="cx">         m_parser.tokenizer().setRCDATAState();
</span><span class="cx">         m_originalInsertionMode = m_insertionMode;
</span><span class="lines">@@ -773,25 +774,25 @@
</span><span class="cx">         processFakePEndTagIfPInButtonScope();
</span><span class="cx">         m_tree.reconstructTheActiveFormattingElements();
</span><span class="cx">         m_framesetOk = false;
</span><del>-        processGenericRawTextStartTag(token);
</del><ins>+        processGenericRawTextStartTag(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == iframeTag) {
</span><span class="cx">         m_framesetOk = false;
</span><del>-        processGenericRawTextStartTag(token);
</del><ins>+        processGenericRawTextStartTag(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == noembedTag &amp;&amp; m_options.pluginsEnabled) {
</span><del>-        processGenericRawTextStartTag(token);
</del><ins>+        processGenericRawTextStartTag(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == noscriptTag &amp;&amp; m_options.scriptEnabled) {
</span><del>-        processGenericRawTextStartTag(token);
</del><ins>+        processGenericRawTextStartTag(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == selectTag) {
</span><span class="cx">         m_tree.reconstructTheActiveFormattingElements();
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         m_framesetOk = false;
</span><span class="cx">         if (m_insertionMode == InsertionMode::InTable
</span><span class="cx">             || m_insertionMode == InsertionMode::InCaption
</span><span class="lines">@@ -807,10 +808,10 @@
</span><span class="cx">     if (token.name() == optgroupTag || token.name() == optionTag) {
</span><span class="cx">         if (is&lt;HTMLOptionElement&gt;(m_tree.currentStackItem().node())) {
</span><span class="cx">             AtomicHTMLToken endOption(HTMLToken::EndTag, optionTag.localName());
</span><del>-            processEndTag(endOption);
</del><ins>+            processEndTag(WTFMove(endOption));
</ins><span class="cx">         }
</span><span class="cx">         m_tree.reconstructTheActiveFormattingElements();
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == rbTag || token.name() == rtcTag) {
</span><span class="lines">@@ -819,7 +820,7 @@
</span><span class="cx">             if (!m_tree.currentStackItem().hasTagName(rubyTag))
</span><span class="cx">                 parseError(token);
</span><span class="cx">         }
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == rtTag || token.name() == rpTag) {
</span><span class="lines">@@ -828,7 +829,7 @@
</span><span class="cx">             if (!m_tree.currentStackItem().hasTagName(rubyTag) &amp;&amp; !m_tree.currentStackItem().hasTagName(rtcTag))
</span><span class="cx">                 parseError(token);
</span><span class="cx">         }
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == MathMLNames::mathTag.localName()) {
</span><span class="lines">@@ -835,7 +836,7 @@
</span><span class="cx">         m_tree.reconstructTheActiveFormattingElements();
</span><span class="cx">         adjustMathMLAttributes(token);
</span><span class="cx">         adjustForeignAttributes(token);
</span><del>-        m_tree.insertForeignElement(token, MathMLNames::mathmlNamespaceURI);
</del><ins>+        m_tree.insertForeignElement(WTFMove(token), MathMLNames::mathmlNamespaceURI);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == SVGNames::svgTag.localName()) {
</span><span class="lines">@@ -842,7 +843,7 @@
</span><span class="cx">         m_tree.reconstructTheActiveFormattingElements();
</span><span class="cx">         adjustSVGAttributes(token);
</span><span class="cx">         adjustForeignAttributes(token);
</span><del>-        m_tree.insertForeignElement(token, SVGNames::svgNamespaceURI);
</del><ins>+        m_tree.insertForeignElement(WTFMove(token), SVGNames::svgNamespaceURI);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (isCaptionColOrColgroupTag(token.name())
</span><span class="lines">@@ -856,18 +857,16 @@
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == templateTag) {
</span><span class="cx">         m_framesetOk = false;
</span><del>-        processTemplateStartTag(token);
</del><ins>+        processTemplateStartTag(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     m_tree.reconstructTheActiveFormattingElements();
</span><del>-    insertGenericHTMLElement(token);
</del><ins>+    insertGenericHTMLElement(WTFMove(token));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline void HTMLTreeBuilder::insertGenericHTMLElement(AtomicHTMLToken&amp; token)
</del><ins>+inline void HTMLTreeBuilder::insertGenericHTMLElement(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><del>-    auto* elementInterface = m_tree.insertHTMLElementOrFindCustomElementInterface(token);
-    if (UNLIKELY(elementInterface))
-        m_customElementToConstruct = std::make_unique&lt;CustomElementConstructionData&gt;(*elementInterface, token.name(), token.attributes());
</del><ins>+    m_customElementToConstruct = m_tree.insertHTMLElementOrFindCustomElementInterface(WTFMove(token));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void HTMLTreeBuilder::didCreateCustomOrCallbackElement(Ref&lt;Element&gt;&amp;&amp; element, CustomElementConstructionData&amp; data)
</span><span class="lines">@@ -875,15 +874,15 @@
</span><span class="cx">     m_tree.insertCustomElement(WTFMove(element), data.name, WTFMove(data.attributes));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processTemplateStartTag(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processTemplateStartTag(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     m_tree.activeFormattingElements().appendMarker();
</span><del>-    m_tree.insertHTMLElement(token);
</del><ins>+    m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">     m_templateInsertionModes.append(InsertionMode::TemplateContents);
</span><span class="cx">     m_insertionMode = InsertionMode::TemplateContents;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool HTMLTreeBuilder::processTemplateEndTag(AtomicHTMLToken&amp; token)
</del><ins>+bool HTMLTreeBuilder::processTemplateEndTag(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.name() == templateTag.localName());
</span><span class="cx">     if (!m_tree.openElements().hasTemplateInHTMLScope()) {
</span><span class="lines">@@ -901,13 +900,13 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool HTMLTreeBuilder::processEndOfFileForInTemplateContents(AtomicHTMLToken&amp; token)
</del><ins>+bool HTMLTreeBuilder::processEndOfFileForInTemplateContents(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     AtomicHTMLToken endTemplate(HTMLToken::EndTag, templateTag.localName());
</span><del>-    if (!processTemplateEndTag(endTemplate))
</del><ins>+    if (!processTemplateEndTag(WTFMove(endTemplate)))
</ins><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    processEndOfFile(token);
</del><ins>+    processEndOfFile(WTFMove(token));
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -939,19 +938,19 @@
</span><span class="cx">     ASSERT(m_insertionMode == InsertionMode::InRow);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processStartTagForInTable(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processStartTagForInTable(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::StartTag);
</span><span class="cx">     if (token.name() == captionTag) {
</span><span class="cx">         m_tree.openElements().popUntilTableScopeMarker();
</span><span class="cx">         m_tree.activeFormattingElements().appendMarker();
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         m_insertionMode = InsertionMode::InCaption;
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == colgroupTag) {
</span><span class="cx">         m_tree.openElements().popUntilTableScopeMarker();
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         m_insertionMode = InsertionMode::InColumnGroup;
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="lines">@@ -958,12 +957,12 @@
</span><span class="cx">     if (token.name() == colTag) {
</span><span class="cx">         processFakeStartTag(colgroupTag);
</span><span class="cx">         ASSERT(m_insertionMode == InsertionMode::InColumnGroup);
</span><del>-        processStartTag(token);
</del><ins>+        processStartTag(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (isTableBodyContextTag(token.name())) {
</span><span class="cx">         m_tree.openElements().popUntilTableScopeMarker();
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         m_insertionMode = InsertionMode::InTableBody;
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="lines">@@ -970,7 +969,7 @@
</span><span class="cx">     if (isTableCellContextTag(token.name()) || token.name() == trTag) {
</span><span class="cx">         processFakeStartTag(tbodyTag);
</span><span class="cx">         ASSERT(m_insertionMode == InsertionMode::InTableBody);
</span><del>-        processStartTag(token);
</del><ins>+        processStartTag(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == tableTag) {
</span><span class="lines">@@ -979,18 +978,18 @@
</span><span class="cx">             ASSERT(isParsingFragmentOrTemplateContents());
</span><span class="cx">             return;
</span><span class="cx">         }
</span><del>-        processStartTag(token);
</del><ins>+        processStartTag(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == styleTag || token.name() == scriptTag) {
</span><del>-        processStartTagForInHead(token);
</del><ins>+        processStartTagForInHead(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == inputTag) {
</span><del>-        Attribute* typeAttribute = findAttribute(token.attributes(), typeAttr);
</del><ins>+        auto* typeAttribute = findAttribute(token.attributes(), typeAttr);
</ins><span class="cx">         if (typeAttribute &amp;&amp; equalLettersIgnoringASCIICase(typeAttribute-&gt;value(), &quot;hidden&quot;)) {
</span><span class="cx">             parseError(token);
</span><del>-            m_tree.insertSelfClosingHTMLElement(token);
</del><ins>+            m_tree.insertSelfClosingHTMLElement(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         // Fall through to &quot;anything else&quot; case.
</span><span class="lines">@@ -999,20 +998,20 @@
</span><span class="cx">         parseError(token);
</span><span class="cx">         if (m_tree.form() &amp;&amp; !isParsingTemplateContents())
</span><span class="cx">             return;
</span><del>-        m_tree.insertHTMLFormElement(token, true);
</del><ins>+        m_tree.insertHTMLFormElement(WTFMove(token), true);
</ins><span class="cx">         m_tree.openElements().pop();
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == templateTag) {
</span><del>-        processTemplateStartTag(token);
</del><ins>+        processTemplateStartTag(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     parseError(token);
</span><span class="cx">     HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree);
</span><del>-    processStartTagForInBody(token);
</del><ins>+    processStartTagForInBody(WTFMove(token));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processStartTag(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processStartTag(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::StartTag);
</span><span class="cx">     switch (m_insertionMode) {
</span><span class="lines">@@ -1022,7 +1021,7 @@
</span><span class="cx">         FALLTHROUGH;
</span><span class="cx">     case InsertionMode::BeforeHTML:
</span><span class="cx">         if (token.name() == htmlTag) {
</span><del>-            m_tree.insertHTMLHtmlStartTagBeforeHTML(token);
</del><ins>+            m_tree.insertHTMLHtmlStartTagBeforeHTML(WTFMove(token));
</ins><span class="cx">             m_insertionMode = InsertionMode::BeforeHead;
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="lines">@@ -1031,11 +1030,11 @@
</span><span class="cx">         FALLTHROUGH;
</span><span class="cx">     case InsertionMode::BeforeHead:
</span><span class="cx">         if (token.name() == htmlTag) {
</span><del>-            processHtmlStartTagForInBody(token);
</del><ins>+            processHtmlStartTagForInBody(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == headTag) {
</span><del>-            m_tree.insertHTMLHeadElement(token);
</del><ins>+            m_tree.insertHTMLHeadElement(WTFMove(token));
</ins><span class="cx">             m_insertionMode = InsertionMode::InHead;
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="lines">@@ -1043,7 +1042,7 @@
</span><span class="cx">         ASSERT(m_insertionMode == InsertionMode::InHead);
</span><span class="cx">         FALLTHROUGH;
</span><span class="cx">     case InsertionMode::InHead:
</span><del>-        if (processStartTagForInHead(token))
</del><ins>+        if (processStartTagForInHead(WTFMove(token)))
</ins><span class="cx">             return;
</span><span class="cx">         defaultForInHead();
</span><span class="cx">         ASSERT(m_insertionMode == InsertionMode::AfterHead);
</span><span class="lines">@@ -1050,17 +1049,17 @@
</span><span class="cx">         FALLTHROUGH;
</span><span class="cx">     case InsertionMode::AfterHead:
</span><span class="cx">         if (token.name() == htmlTag) {
</span><del>-            processHtmlStartTagForInBody(token);
</del><ins>+            processHtmlStartTagForInBody(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == bodyTag) {
</span><span class="cx">             m_framesetOk = false;
</span><del>-            m_tree.insertHTMLBodyElement(token);
</del><ins>+            m_tree.insertHTMLBodyElement(WTFMove(token));
</ins><span class="cx">             m_insertionMode = InsertionMode::InBody;
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == framesetTag) {
</span><del>-            m_tree.insertHTMLElement(token);
</del><ins>+            m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">             m_insertionMode = InsertionMode::InFrameset;
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="lines">@@ -1077,7 +1076,7 @@
</span><span class="cx">             parseError(token);
</span><span class="cx">             ASSERT(m_tree.headStackItem());
</span><span class="cx">             m_tree.openElements().pushHTMLHeadElement(*m_tree.headStackItem());
</span><del>-            processStartTagForInHead(token);
</del><ins>+            processStartTagForInHead(WTFMove(token));
</ins><span class="cx">             m_tree.openElements().removeHTMLHeadElement(m_tree.head());
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="lines">@@ -1089,10 +1088,10 @@
</span><span class="cx">         ASSERT(m_insertionMode == InsertionMode::InBody);
</span><span class="cx">         FALLTHROUGH;
</span><span class="cx">     case InsertionMode::InBody:
</span><del>-        processStartTagForInBody(token);
</del><ins>+        processStartTagForInBody(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InTable:
</span><del>-        processStartTagForInTable(token);
</del><ins>+        processStartTagForInTable(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InCaption:
</span><span class="cx">         if (isCaptionColOrColgroupTag(token.name())
</span><span class="lines">@@ -1104,22 +1103,22 @@
</span><span class="cx">                 ASSERT(isParsingFragment());
</span><span class="cx">                 return;
</span><span class="cx">             }
</span><del>-            processStartTag(token);
</del><ins>+            processStartTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><del>-        processStartTagForInBody(token);
</del><ins>+        processStartTagForInBody(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InColumnGroup:
</span><span class="cx">         if (token.name() == htmlTag) {
</span><del>-            processHtmlStartTagForInBody(token);
</del><ins>+            processHtmlStartTagForInBody(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == colTag) {
</span><del>-            m_tree.insertSelfClosingHTMLElement(token);
</del><ins>+            m_tree.insertSelfClosingHTMLElement(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == templateTag) {
</span><del>-            processTemplateStartTag(token);
</del><ins>+            processTemplateStartTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (!processColgroupEndTagForInColumnGroup()) {
</span><span class="lines">@@ -1126,12 +1125,12 @@
</span><span class="cx">             ASSERT(isParsingFragmentOrTemplateContents());
</span><span class="cx">             return;
</span><span class="cx">         }
</span><del>-        processStartTag(token);
</del><ins>+        processStartTag(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InTableBody:
</span><span class="cx">         if (token.name() == trTag) {
</span><span class="cx">             m_tree.openElements().popUntilTableBodyScopeMarker(); // How is there ever anything to pop?
</span><del>-            m_tree.insertHTMLElement(token);
</del><ins>+            m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">             m_insertionMode = InsertionMode::InRow;
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="lines">@@ -1139,7 +1138,7 @@
</span><span class="cx">             parseError(token);
</span><span class="cx">             processFakeStartTag(trTag);
</span><span class="cx">             ASSERT(m_insertionMode == InsertionMode::InRow);
</span><del>-            processStartTag(token);
</del><ins>+            processStartTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (isCaptionColOrColgroupTag(token.name()) || isTableBodyContextTag(token.name())) {
</span><span class="lines">@@ -1152,15 +1151,15 @@
</span><span class="cx">             m_tree.openElements().popUntilTableBodyScopeMarker();
</span><span class="cx">             ASSERT(isTableBodyContextTag(m_tree.currentStackItem().localName()));
</span><span class="cx">             processFakeEndTag(m_tree.currentStackItem().localName());
</span><del>-            processStartTag(token);
</del><ins>+            processStartTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><del>-        processStartTagForInTable(token);
</del><ins>+        processStartTagForInTable(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InRow:
</span><span class="cx">         if (isTableCellContextTag(token.name())) {
</span><span class="cx">             m_tree.openElements().popUntilTableRowScopeMarker();
</span><del>-            m_tree.insertHTMLElement(token);
</del><ins>+            m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">             m_insertionMode = InsertionMode::InCell;
</span><span class="cx">             m_tree.activeFormattingElements().appendMarker();
</span><span class="cx">             return;
</span><span class="lines">@@ -1173,10 +1172,10 @@
</span><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="cx">             ASSERT(m_insertionMode == InsertionMode::InTableBody);
</span><del>-            processStartTag(token);
</del><ins>+            processStartTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><del>-        processStartTagForInTable(token);
</del><ins>+        processStartTagForInTable(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InCell:
</span><span class="cx">         if (isCaptionColOrColgroupTag(token.name())
</span><span class="lines">@@ -1190,23 +1189,23 @@
</span><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="cx">             closeTheCell();
</span><del>-            processStartTag(token);
</del><ins>+            processStartTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><del>-        processStartTagForInBody(token);
</del><ins>+        processStartTagForInBody(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::AfterBody:
</span><span class="cx">     case InsertionMode::AfterAfterBody:
</span><span class="cx">         if (token.name() == htmlTag) {
</span><del>-            processHtmlStartTagForInBody(token);
</del><ins>+            processHtmlStartTagForInBody(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         m_insertionMode = InsertionMode::InBody;
</span><del>-        processStartTag(token);
</del><ins>+        processStartTag(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InHeadNoscript:
</span><span class="cx">         if (token.name() == htmlTag) {
</span><del>-            processHtmlStartTagForInBody(token);
</del><ins>+            processHtmlStartTagForInBody(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == basefontTag
</span><span class="lines">@@ -1215,7 +1214,7 @@
</span><span class="cx">             || token.name() == metaTag
</span><span class="cx">             || token.name() == noframesTag
</span><span class="cx">             || token.name() == styleTag) {
</span><del>-            bool didProcess = processStartTagForInHead(token);
</del><ins>+            bool didProcess = processStartTagForInHead(WTFMove(token));
</ins><span class="cx">             ASSERT_UNUSED(didProcess, didProcess);
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="lines">@@ -1224,23 +1223,23 @@
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         defaultForInHeadNoscript();
</span><del>-        processToken(token);
</del><ins>+        processToken(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InFrameset:
</span><span class="cx">         if (token.name() == htmlTag) {
</span><del>-            processHtmlStartTagForInBody(token);
</del><ins>+            processHtmlStartTagForInBody(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == framesetTag) {
</span><del>-            m_tree.insertHTMLElement(token);
</del><ins>+            m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == frameTag) {
</span><del>-            m_tree.insertSelfClosingHTMLElement(token);
</del><ins>+            m_tree.insertSelfClosingHTMLElement(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == noframesTag) {
</span><del>-            processStartTagForInHead(token);
</del><ins>+            processStartTagForInHead(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         parseError(token);
</span><span class="lines">@@ -1248,11 +1247,11 @@
</span><span class="cx">     case InsertionMode::AfterFrameset:
</span><span class="cx">     case InsertionMode::AfterAfterFrameset:
</span><span class="cx">         if (token.name() == htmlTag) {
</span><del>-            processHtmlStartTagForInBody(token);
</del><ins>+            processHtmlStartTagForInBody(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == noframesTag) {
</span><del>-            processStartTagForInHead(token);
</del><ins>+            processStartTagForInHead(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         parseError(token);
</span><span class="lines">@@ -1265,40 +1264,40 @@
</span><span class="cx">             || isTableCellContextTag(token.name())) {
</span><span class="cx">             parseError(token);
</span><span class="cx">             AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName());
</span><del>-            processEndTag(endSelect);
-            processStartTag(token);
</del><ins>+            processEndTag(WTFMove(endSelect));
+            processStartTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         FALLTHROUGH;
</span><span class="cx">     case InsertionMode::InSelect:
</span><span class="cx">         if (token.name() == htmlTag) {
</span><del>-            processHtmlStartTagForInBody(token);
</del><ins>+            processHtmlStartTagForInBody(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == optionTag) {
</span><span class="cx">             if (is&lt;HTMLOptionElement&gt;(m_tree.currentStackItem().node())) {
</span><span class="cx">                 AtomicHTMLToken endOption(HTMLToken::EndTag, optionTag.localName());
</span><del>-                processEndTag(endOption);
</del><ins>+                processEndTag(WTFMove(endOption));
</ins><span class="cx">             }
</span><del>-            m_tree.insertHTMLElement(token);
</del><ins>+            m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == optgroupTag) {
</span><span class="cx">             if (is&lt;HTMLOptionElement&gt;(m_tree.currentStackItem().node())) {
</span><span class="cx">                 AtomicHTMLToken endOption(HTMLToken::EndTag, optionTag.localName());
</span><del>-                processEndTag(endOption);
</del><ins>+                processEndTag(WTFMove(endOption));
</ins><span class="cx">             }
</span><span class="cx">             if (is&lt;HTMLOptGroupElement&gt;(m_tree.currentStackItem().node())) {
</span><span class="cx">                 AtomicHTMLToken endOptgroup(HTMLToken::EndTag, optgroupTag.localName());
</span><del>-                processEndTag(endOptgroup);
</del><ins>+                processEndTag(WTFMove(endOptgroup));
</ins><span class="cx">             }
</span><del>-            m_tree.insertHTMLElement(token);
</del><ins>+            m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == selectTag) {
</span><span class="cx">             parseError(token);
</span><span class="cx">             AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName());
</span><del>-            processEndTag(endSelect);
</del><ins>+            processEndTag(WTFMove(endSelect));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == inputTag || token.name() == keygenTag || token.name() == textareaTag) {
</span><span class="lines">@@ -1308,23 +1307,23 @@
</span><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="cx">             AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName());
</span><del>-            processEndTag(endSelect);
-            processStartTag(token);
</del><ins>+            processEndTag(WTFMove(endSelect));
+            processStartTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == scriptTag) {
</span><del>-            bool didProcess = processStartTagForInHead(token);
</del><ins>+            bool didProcess = processStartTagForInHead(WTFMove(token));
</ins><span class="cx">             ASSERT_UNUSED(didProcess, didProcess);
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == templateTag) {
</span><del>-            processTemplateStartTag(token);
</del><ins>+            processTemplateStartTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InTableText:
</span><span class="cx">         defaultForInTableText();
</span><del>-        processStartTag(token);
</del><ins>+        processStartTag(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::Text:
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="lines">@@ -1331,7 +1330,7 @@
</span><span class="cx">         break;
</span><span class="cx">     case InsertionMode::TemplateContents:
</span><span class="cx">         if (token.name() == templateTag) {
</span><del>-            processTemplateStartTag(token);
</del><ins>+            processTemplateStartTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -1339,7 +1338,7 @@
</span><span class="cx">             || token.name() == scriptTag
</span><span class="cx">             || token.name() == styleTag
</span><span class="cx">             || token.name() == metaTag) {
</span><del>-            processStartTagForInHead(token);
</del><ins>+            processStartTagForInHead(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -1360,12 +1359,12 @@
</span><span class="cx">         m_templateInsertionModes.last() = insertionMode;
</span><span class="cx">         m_insertionMode = insertionMode;
</span><span class="cx"> 
</span><del>-        processStartTag(token);
</del><ins>+        processStartTag(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processHtmlStartTagForInBody(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processHtmlStartTagForInBody(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     parseError(token);
</span><span class="cx">     if (m_tree.openElements().hasTemplateInHTMLScope()) {
</span><span class="lines">@@ -1372,10 +1371,10 @@
</span><span class="cx">         ASSERT(isParsingTemplateContents());
</span><span class="cx">         return;
</span><span class="cx">     }
</span><del>-    m_tree.insertHTMLHtmlStartTagInBody(token);
</del><ins>+    m_tree.insertHTMLHtmlStartTagInBody(WTFMove(token));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool HTMLTreeBuilder::processBodyEndTagForInBody(AtomicHTMLToken&amp; token)
</del><ins>+bool HTMLTreeBuilder::processBodyEndTagForInBody(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::EndTag);
</span><span class="cx">     ASSERT(token.name() == bodyTag);
</span><span class="lines">@@ -1388,7 +1387,7 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processAnyOtherEndTagForInBody(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processAnyOtherEndTagForInBody(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::EndTag);
</span><span class="cx">     for (auto* record = &amp;m_tree.openElements().topRecord(); ; record = record-&gt;next()) {
</span><span class="lines">@@ -1423,7 +1422,7 @@
</span><span class="cx">         Element* formattingElement = m_tree.activeFormattingElements().closestElementInScopeWithName(token.name());
</span><span class="cx">         // 4.a
</span><span class="cx">         if (!formattingElement)
</span><del>-            return processAnyOtherEndTagForInBody(token);
</del><ins>+            return processAnyOtherEndTagForInBody(WTFMove(token));
</ins><span class="cx">         // 4.c
</span><span class="cx">         if ((m_tree.openElements().contains(*formattingElement)) &amp;&amp; !m_tree.openElements().inScope(*formattingElement)) {
</span><span class="cx">             parseError(token);
</span><span class="lines">@@ -1592,7 +1591,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processEndTagForInTableBody(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processEndTagForInTableBody(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::EndTag);
</span><span class="cx">     if (isTableBodyContextTag(token.name())) {
</span><span class="lines">@@ -1615,7 +1614,7 @@
</span><span class="cx">         m_tree.openElements().popUntilTableBodyScopeMarker();
</span><span class="cx">         ASSERT(isTableBodyContextTag(m_tree.currentStackItem().localName()));
</span><span class="cx">         processFakeEndTag(m_tree.currentStackItem().localName());
</span><del>-        processEndTag(token);
</del><ins>+        processEndTag(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == bodyTag
</span><span class="lines">@@ -1626,10 +1625,10 @@
</span><span class="cx">         parseError(token);
</span><span class="cx">         return;
</span><span class="cx">     }
</span><del>-    processEndTagForInTable(token);
</del><ins>+    processEndTagForInTable(WTFMove(token));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processEndTagForInRow(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processEndTagForInRow(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::EndTag);
</span><span class="cx">     if (token.name() == trTag) {
</span><span class="lines">@@ -1642,7 +1641,7 @@
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         ASSERT(m_insertionMode == InsertionMode::InTableBody);
</span><del>-        processEndTag(token);
</del><ins>+        processEndTag(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (isTableBodyContextTag(token.name())) {
</span><span class="lines">@@ -1652,7 +1651,7 @@
</span><span class="cx">         }
</span><span class="cx">         processFakeEndTag(trTag);
</span><span class="cx">         ASSERT(m_insertionMode == InsertionMode::InTableBody);
</span><del>-        processEndTag(token);
</del><ins>+        processEndTag(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == bodyTag
</span><span class="lines">@@ -1662,10 +1661,10 @@
</span><span class="cx">         parseError(token);
</span><span class="cx">         return;
</span><span class="cx">     }
</span><del>-    processEndTagForInTable(token);
</del><ins>+    processEndTagForInTable(WTFMove(token));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processEndTagForInCell(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processEndTagForInCell(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::EndTag);
</span><span class="cx">     if (isTableCellContextTag(token.name())) {
</span><span class="lines">@@ -1696,23 +1695,23 @@
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         closeTheCell();
</span><del>-        processEndTag(token);
</del><ins>+        processEndTag(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><del>-    processEndTagForInBody(token);
</del><ins>+    processEndTagForInBody(WTFMove(token));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processEndTagForInBody(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processEndTagForInBody(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::EndTag);
</span><span class="cx">     if (token.name() == bodyTag) {
</span><del>-        processBodyEndTagForInBody(token);
</del><ins>+        processBodyEndTagForInBody(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == htmlTag) {
</span><span class="cx">         AtomicHTMLToken endBody(HTMLToken::EndTag, bodyTag.localName());
</span><del>-        if (processBodyEndTagForInBody(endBody))
-            processEndTag(token);
</del><ins>+        if (processBodyEndTagForInBody(WTFMove(endBody)))
+            processEndTag(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == addressTag
</span><span class="lines">@@ -1777,7 +1776,7 @@
</span><span class="cx">             parseError(token);
</span><span class="cx">             processFakeStartTag(pTag);
</span><span class="cx">             ASSERT(m_tree.openElements().inScope(token.name()));
</span><del>-            processEndTag(token);
</del><ins>+            processEndTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         m_tree.generateImpliedEndTagsWithExclusion(token.name());
</span><span class="lines">@@ -1841,10 +1840,10 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == templateTag) {
</span><del>-        processTemplateEndTag(token);
</del><ins>+        processTemplateEndTag(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><del>-    processAnyOtherEndTagForInBody(token);
</del><ins>+    processAnyOtherEndTagForInBody(WTFMove(token));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool HTMLTreeBuilder::processCaptionEndTagForInCaption()
</span><span class="lines">@@ -1888,7 +1887,7 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processEndTagForInTable(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processEndTagForInTable(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::EndTag);
</span><span class="cx">     if (token.name() == tableTag) {
</span><span class="lines">@@ -1907,10 +1906,10 @@
</span><span class="cx">     parseError(token);
</span><span class="cx">     // Is this redirection necessary here?
</span><span class="cx">     HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree);
</span><del>-    processEndTagForInBody(token);
</del><ins>+    processEndTagForInBody(WTFMove(token));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processEndTag(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processEndTag(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::EndTag);
</span><span class="cx">     switch (m_insertionMode) {
</span><span class="lines">@@ -1939,7 +1938,7 @@
</span><span class="cx">         // because other end tag cases now refer to it (&quot;process the token for using the rules of the &quot;in head&quot; insertion mode&quot;).
</span><span class="cx">         // but because the logic falls through to InsertionMode::AfterHead, that gets a little messy.
</span><span class="cx">         if (token.name() == templateTag) {
</span><del>-            processTemplateEndTag(token);
</del><ins>+            processTemplateEndTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == headTag) {
</span><span class="lines">@@ -1963,10 +1962,10 @@
</span><span class="cx">         ASSERT(m_insertionMode == InsertionMode::InBody);
</span><span class="cx">         FALLTHROUGH;
</span><span class="cx">     case InsertionMode::InBody:
</span><del>-        processEndTagForInBody(token);
</del><ins>+        processEndTagForInBody(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InTable:
</span><del>-        processEndTagForInTable(token);
</del><ins>+        processEndTagForInTable(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InCaption:
</span><span class="cx">         if (token.name() == captionTag) {
</span><span class="lines">@@ -1979,7 +1978,7 @@
</span><span class="cx">                 ASSERT(isParsingFragment());
</span><span class="cx">                 return;
</span><span class="cx">             }
</span><del>-            processEndTag(token);
</del><ins>+            processEndTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == bodyTag
</span><span class="lines">@@ -1992,7 +1991,7 @@
</span><span class="cx">             parseError(token);
</span><span class="cx">             return;
</span><span class="cx">         }
</span><del>-        processEndTagForInBody(token);
</del><ins>+        processEndTagForInBody(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InColumnGroup:
</span><span class="cx">         if (token.name() == colgroupTag) {
</span><span class="lines">@@ -2004,7 +2003,7 @@
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == templateTag) {
</span><del>-            processTemplateEndTag(token);
</del><ins>+            processTemplateEndTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (!processColgroupEndTagForInColumnGroup()) {
</span><span class="lines">@@ -2011,16 +2010,16 @@
</span><span class="cx">             ASSERT(isParsingFragmentOrTemplateContents());
</span><span class="cx">             return;
</span><span class="cx">         }
</span><del>-        processEndTag(token);
</del><ins>+        processEndTag(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InRow:
</span><del>-        processEndTagForInRow(token);
</del><ins>+        processEndTagForInRow(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InCell:
</span><del>-        processEndTagForInCell(token);
</del><ins>+        processEndTagForInCell(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InTableBody:
</span><del>-        processEndTagForInTableBody(token);
</del><ins>+        processEndTagForInTableBody(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::AfterBody:
</span><span class="cx">         if (token.name() == htmlTag) {
</span><span class="lines">@@ -2036,7 +2035,7 @@
</span><span class="cx">         ASSERT(m_insertionMode == InsertionMode::AfterBody || m_insertionMode == InsertionMode::AfterAfterBody);
</span><span class="cx">         parseError(token);
</span><span class="cx">         m_insertionMode = InsertionMode::InBody;
</span><del>-        processEndTag(token);
</del><ins>+        processEndTag(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InHeadNoscript:
</span><span class="cx">         if (token.name() == noscriptTag) {
</span><span class="lines">@@ -2051,7 +2050,7 @@
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         defaultForInHeadNoscript();
</span><del>-        processToken(token);
</del><ins>+        processToken(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::Text:
</span><span class="cx">         if (token.name() == scriptTag) {
</span><span class="lines">@@ -2106,8 +2105,8 @@
</span><span class="cx">             parseError(token);
</span><span class="cx">             if (m_tree.openElements().inTableScope(token.name())) {
</span><span class="cx">                 AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName());
</span><del>-                processEndTag(endSelect);
-                processEndTag(token);
</del><ins>+                processEndTag(WTFMove(endSelect));
+                processEndTag(WTFMove(token));
</ins><span class="cx">             }
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="lines">@@ -2143,17 +2142,17 @@
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (token.name() == templateTag) {
</span><del>-            processTemplateEndTag(token);
</del><ins>+            processTemplateEndTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InTableText:
</span><span class="cx">         defaultForInTableText();
</span><del>-        processEndTag(token);
</del><ins>+        processEndTag(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     case InsertionMode::TemplateContents:
</span><span class="cx">         if (token.name() == templateTag) {
</span><del>-            processTemplateEndTag(token);
</del><ins>+            processTemplateEndTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         break;
</span><span class="lines">@@ -2160,7 +2159,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processComment(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processComment(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::Comment);
</span><span class="cx">     if (m_insertionMode == InsertionMode::Initial
</span><span class="lines">@@ -2167,22 +2166,22 @@
</span><span class="cx">         || m_insertionMode == InsertionMode::BeforeHTML
</span><span class="cx">         || m_insertionMode == InsertionMode::AfterAfterBody
</span><span class="cx">         || m_insertionMode == InsertionMode::AfterAfterFrameset) {
</span><del>-        m_tree.insertCommentOnDocument(token);
</del><ins>+        m_tree.insertCommentOnDocument(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (m_insertionMode == InsertionMode::AfterBody) {
</span><del>-        m_tree.insertCommentOnHTMLHtmlElement(token);
</del><ins>+        m_tree.insertCommentOnHTMLHtmlElement(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (m_insertionMode == InsertionMode::InTableText) {
</span><span class="cx">         defaultForInTableText();
</span><del>-        processComment(token);
</del><ins>+        processComment(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><del>-    m_tree.insertComment(token);
</del><ins>+    m_tree.insertComment(WTFMove(token));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processCharacter(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processCharacter(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::Character);
</span><span class="cx">     ExternalCharacterTokenBuffer buffer(token);
</span><span class="lines">@@ -2202,10 +2201,10 @@
</span><span class="cx">     AtomicHTMLToken aStartToken(HTMLToken::StartTag, aTagLocalName, WTFMove(attributes));
</span><span class="cx">     AtomicHTMLToken aEndToken(HTMLToken::EndTag, aTagLocalName);
</span><span class="cx"> 
</span><del>-    processStartTag(aStartToken);
</del><ins>+    processStartTag(WTFMove(aStartToken));
</ins><span class="cx">     m_tree.executeQueuedTasks();
</span><span class="cx">     m_tree.insertTextNode(string);
</span><del>-    processEndTag(aEndToken);
</del><ins>+    processEndTag(WTFMove(aEndToken));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // Locates the phone numbers in the string and deals with it
</span><span class="lines">@@ -2440,7 +2439,7 @@
</span><span class="cx">         m_framesetOk = false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processEndOfFile(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processEndOfFile(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::EndOfFile);
</span><span class="cx">     switch (m_insertionMode) {
</span><span class="lines">@@ -2470,7 +2469,7 @@
</span><span class="cx">     case InsertionMode::InRow:
</span><span class="cx">         notImplemented(); // Emit parse error based on what elements are still open.
</span><span class="cx">         if (!m_templateInsertionModes.isEmpty()) {
</span><del>-            if (processEndOfFileForInTemplateContents(token))
</del><ins>+            if (processEndOfFileForInTemplateContents(WTFMove(token)))
</ins><span class="cx">                 return;
</span><span class="cx">         }
</span><span class="cx">         break;
</span><span class="lines">@@ -2479,7 +2478,7 @@
</span><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InHeadNoscript:
</span><span class="cx">         defaultForInHeadNoscript();
</span><del>-        processEndOfFile(token);
</del><ins>+        processEndOfFile(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     case InsertionMode::AfterFrameset:
</span><span class="cx">     case InsertionMode::AfterAfterFrameset:
</span><span class="lines">@@ -2501,13 +2500,13 @@
</span><span class="cx">         if (&amp;m_tree.currentNode() != &amp;m_tree.openElements().rootNode())
</span><span class="cx">             parseError(token);
</span><span class="cx">         if (!m_templateInsertionModes.isEmpty()) {
</span><del>-            if (processEndOfFileForInTemplateContents(token))
</del><ins>+            if (processEndOfFileForInTemplateContents(WTFMove(token)))
</ins><span class="cx">                 return;
</span><span class="cx">         }
</span><span class="cx">         break;
</span><span class="cx">     case InsertionMode::InTableText:
</span><span class="cx">         defaultForInTableText();
</span><del>-        processEndOfFile(token);
</del><ins>+        processEndOfFile(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     case InsertionMode::Text:
</span><span class="cx">         parseError(token);
</span><span class="lines">@@ -2516,10 +2515,10 @@
</span><span class="cx">         m_tree.openElements().pop();
</span><span class="cx">         ASSERT(m_originalInsertionMode != InsertionMode::Text);
</span><span class="cx">         m_insertionMode = m_originalInsertionMode;
</span><del>-        processEndOfFile(token);
</del><ins>+        processEndOfFile(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     case InsertionMode::TemplateContents:
</span><del>-        if (processEndOfFileForInTemplateContents(token))
</del><ins>+        if (processEndOfFileForInTemplateContents(WTFMove(token)))
</ins><span class="cx">             return;
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="lines">@@ -2537,7 +2536,7 @@
</span><span class="cx"> void HTMLTreeBuilder::defaultForBeforeHTML()
</span><span class="cx"> {
</span><span class="cx">     AtomicHTMLToken startHTML(HTMLToken::StartTag, htmlTag.localName());
</span><del>-    m_tree.insertHTMLHtmlStartTagBeforeHTML(startHTML);
</del><ins>+    m_tree.insertHTMLHtmlStartTagBeforeHTML(WTFMove(startHTML));
</ins><span class="cx">     m_insertionMode = InsertionMode::BeforeHead;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -2544,25 +2543,25 @@
</span><span class="cx"> void HTMLTreeBuilder::defaultForBeforeHead()
</span><span class="cx"> {
</span><span class="cx">     AtomicHTMLToken startHead(HTMLToken::StartTag, headTag.localName());
</span><del>-    processStartTag(startHead);
</del><ins>+    processStartTag(WTFMove(startHead));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void HTMLTreeBuilder::defaultForInHead()
</span><span class="cx"> {
</span><span class="cx">     AtomicHTMLToken endHead(HTMLToken::EndTag, headTag.localName());
</span><del>-    processEndTag(endHead);
</del><ins>+    processEndTag(WTFMove(endHead));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void HTMLTreeBuilder::defaultForInHeadNoscript()
</span><span class="cx"> {
</span><span class="cx">     AtomicHTMLToken endNoscript(HTMLToken::EndTag, noscriptTag.localName());
</span><del>-    processEndTag(endNoscript);
</del><ins>+    processEndTag(WTFMove(endNoscript));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void HTMLTreeBuilder::defaultForAfterHead()
</span><span class="cx"> {
</span><span class="cx">     AtomicHTMLToken startBody(HTMLToken::StartTag, bodyTag.localName());
</span><del>-    processStartTag(startBody);
</del><ins>+    processStartTag(WTFMove(startBody));
</ins><span class="cx">     m_framesetOk = true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -2583,11 +2582,11 @@
</span><span class="cx">     m_insertionMode = m_originalInsertionMode;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool HTMLTreeBuilder::processStartTagForInHead(AtomicHTMLToken&amp; token)
</del><ins>+bool HTMLTreeBuilder::processStartTagForInHead(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::StartTag);
</span><span class="cx">     if (token.name() == htmlTag) {
</span><del>-        processHtmlStartTagForInBody(token);
</del><ins>+        processHtmlStartTagForInBody(WTFMove(token));
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == baseTag
</span><span class="lines">@@ -2596,36 +2595,37 @@
</span><span class="cx">         || token.name() == commandTag
</span><span class="cx">         || token.name() == linkTag
</span><span class="cx">         || token.name() == metaTag) {
</span><del>-        m_tree.insertSelfClosingHTMLElement(token);
</del><ins>+        m_tree.insertSelfClosingHTMLElement(WTFMove(token));
</ins><span class="cx">         // Note: The custom processing for the &lt;meta&gt; tag is done in HTMLMetaElement::process().
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == titleTag) {
</span><del>-        processGenericRCDATAStartTag(token);
</del><ins>+        processGenericRCDATAStartTag(WTFMove(token));
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == noscriptTag) {
</span><span class="cx">         if (m_options.scriptEnabled) {
</span><del>-            processGenericRawTextStartTag(token);
</del><ins>+            processGenericRawTextStartTag(WTFMove(token));
</ins><span class="cx">             return true;
</span><span class="cx">         }
</span><del>-        m_tree.insertHTMLElement(token);
</del><ins>+        m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">         m_insertionMode = InsertionMode::InHeadNoscript;
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == noframesTag || token.name() == styleTag) {
</span><del>-        processGenericRawTextStartTag(token);
</del><ins>+        processGenericRawTextStartTag(WTFMove(token));
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == scriptTag) {
</span><del>-        processScriptStartTag(token);
-        if (m_options.usePreHTML5ParserQuirks &amp;&amp; token.selfClosing())
</del><ins>+        bool isSelfClosing = token.selfClosing();
+        processScriptStartTag(WTFMove(token));
+        if (m_options.usePreHTML5ParserQuirks &amp;&amp; isSelfClosing)
</ins><span class="cx">             processFakeEndTag(scriptTag);
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == templateTag) {
</span><span class="cx">         m_framesetOk = false;
</span><del>-        processTemplateStartTag(token);
</del><ins>+        processTemplateStartTag(WTFMove(token));
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     if (token.name() == headTag) {
</span><span class="lines">@@ -2635,28 +2635,28 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processGenericRCDATAStartTag(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processGenericRCDATAStartTag(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::StartTag);
</span><del>-    m_tree.insertHTMLElement(token);
</del><ins>+    m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">     m_parser.tokenizer().setRCDATAState();
</span><span class="cx">     m_originalInsertionMode = m_insertionMode;
</span><span class="cx">     m_insertionMode = InsertionMode::Text;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processGenericRawTextStartTag(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processGenericRawTextStartTag(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::StartTag);
</span><del>-    m_tree.insertHTMLElement(token);
</del><ins>+    m_tree.insertHTMLElement(WTFMove(token));
</ins><span class="cx">     m_parser.tokenizer().setRAWTEXTState();
</span><span class="cx">     m_originalInsertionMode = m_insertionMode;
</span><span class="cx">     m_insertionMode = InsertionMode::Text;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processScriptStartTag(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processScriptStartTag(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(token.type() == HTMLToken::StartTag);
</span><del>-    m_tree.insertScriptElement(token);
</del><ins>+    m_tree.insertScriptElement(WTFMove(token));
</ins><span class="cx">     m_parser.tokenizer().setScriptDataState();
</span><span class="cx">     m_originalInsertionMode = m_insertionMode;
</span><span class="cx"> 
</span><span class="lines">@@ -2678,7 +2678,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#tree-construction
</span><del>-bool HTMLTreeBuilder::shouldProcessTokenInForeignContent(AtomicHTMLToken&amp; token)
</del><ins>+bool HTMLTreeBuilder::shouldProcessTokenInForeignContent(const AtomicHTMLToken&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     if (m_tree.isEmpty())
</span><span class="cx">         return false;
</span><span class="lines">@@ -2708,12 +2708,12 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static bool hasAttribute(AtomicHTMLToken&amp; token, const QualifiedName&amp; name)
</del><ins>+static bool hasAttribute(const AtomicHTMLToken&amp; token, const QualifiedName&amp; name)
</ins><span class="cx"> {
</span><span class="cx">     return findAttribute(token.attributes(), name);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTreeBuilder::processTokenInForeignContent(AtomicHTMLToken&amp; token)
</del><ins>+void HTMLTreeBuilder::processTokenInForeignContent(AtomicHTMLToken&amp;&amp; token)
</ins><span class="cx"> {
</span><span class="cx">     HTMLStackItem&amp; adjustedCurrentNode = adjustedCurrentStackItem();
</span><span class="cx">     
</span><span class="lines">@@ -2767,7 +2767,7 @@
</span><span class="cx">             || (token.name() == fontTag &amp;&amp; (hasAttribute(token, colorAttr) || hasAttribute(token, faceAttr) || hasAttribute(token, sizeAttr)))) {
</span><span class="cx">             parseError(token);
</span><span class="cx">             m_tree.openElements().popUntilForeignContentScopeMarker();
</span><del>-            processStartTag(token);
</del><ins>+            processStartTag(WTFMove(token));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         const AtomicString&amp; currentNamespace = adjustedCurrentNode.namespaceURI();
</span><span class="lines">@@ -2778,7 +2778,7 @@
</span><span class="cx">             adjustSVGAttributes(token);
</span><span class="cx">         }
</span><span class="cx">         adjustForeignAttributes(token);
</span><del>-        m_tree.insertForeignElement(token, currentNamespace);
</del><ins>+        m_tree.insertForeignElement(WTFMove(token), currentNamespace);
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx">     case HTMLToken::EndTag: {
</span><span class="lines">@@ -2808,11 +2808,11 @@
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx">         // Otherwise, process the token according to the rules given in the section corresponding to the current insertion mode in HTML content.
</span><del>-        processEndTag(token);
</del><ins>+        processEndTag(WTFMove(token));
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx">     case HTMLToken::Comment:
</span><del>-        m_tree.insertComment(token);
</del><ins>+        m_tree.insertComment(WTFMove(token));
</ins><span class="cx">         return;
</span><span class="cx">     case HTMLToken::Character: {
</span><span class="cx">         String characters = String(token.characters(), token.charactersLength());
</span><span class="lines">@@ -2840,7 +2840,7 @@
</span><span class="cx">     // The tree builder might have been destroyed as an indirect result of finishing the parsing.
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline void HTMLTreeBuilder::parseError(AtomicHTMLToken&amp;)
</del><ins>+inline void HTMLTreeBuilder::parseError(const AtomicHTMLToken&amp;)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlparserHTMLTreeBuilderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/parser/HTMLTreeBuilder.h (208775 => 208776)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/parser/HTMLTreeBuilder.h        2016-11-16 01:06:57 UTC (rev 208775)
+++ trunk/Source/WebCore/html/parser/HTMLTreeBuilder.h        2016-11-16 01:16:31 UTC (rev 208776)
</span><span class="lines">@@ -37,7 +37,7 @@
</span><span class="cx"> class HTMLDocumentParser;
</span><span class="cx"> 
</span><span class="cx"> struct CustomElementConstructionData {
</span><del>-    CustomElementConstructionData(Ref&lt;JSCustomElementInterface&gt;&amp;&amp;, const AtomicString&amp; name, const Vector&lt;Attribute&gt;&amp;);
</del><ins>+    CustomElementConstructionData(Ref&lt;JSCustomElementInterface&gt;&amp;&amp;, const AtomicString&amp; name, Vector&lt;Attribute&gt;&amp;&amp;);
</ins><span class="cx">     ~CustomElementConstructionData();
</span><span class="cx"> 
</span><span class="cx">     Ref&lt;JSCustomElementInterface&gt; elementInterface;
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool isParsingFragment() const;
</span><span class="cx"> 
</span><del>-    void constructTree(AtomicHTMLToken&amp;);
</del><ins>+    void constructTree(AtomicHTMLToken&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     bool isParsingTemplateContents() const;
</span><span class="cx">     bool hasParserBlockingScriptWork() const;
</span><span class="lines">@@ -108,32 +108,32 @@
</span><span class="cx">     void linkifyPhoneNumbers(const String&amp;);
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    void processToken(AtomicHTMLToken&amp;);
</del><ins>+    void processToken(AtomicHTMLToken&amp;&amp;);
</ins><span class="cx"> 
</span><del>-    void processDoctypeToken(AtomicHTMLToken&amp;);
-    void processStartTag(AtomicHTMLToken&amp;);
-    void processEndTag(AtomicHTMLToken&amp;);
-    void processComment(AtomicHTMLToken&amp;);
-    void processCharacter(AtomicHTMLToken&amp;);
-    void processEndOfFile(AtomicHTMLToken&amp;);
</del><ins>+    void processDoctypeToken(AtomicHTMLToken&amp;&amp;);
+    void processStartTag(AtomicHTMLToken&amp;&amp;);
+    void processEndTag(AtomicHTMLToken&amp;&amp;);
+    void processComment(AtomicHTMLToken&amp;&amp;);
+    void processCharacter(AtomicHTMLToken&amp;&amp;);
+    void processEndOfFile(AtomicHTMLToken&amp;&amp;);
</ins><span class="cx"> 
</span><del>-    bool processStartTagForInHead(AtomicHTMLToken&amp;);
-    void processStartTagForInBody(AtomicHTMLToken&amp;);
-    void processStartTagForInTable(AtomicHTMLToken&amp;);
-    void processEndTagForInBody(AtomicHTMLToken&amp;);
-    void processEndTagForInTable(AtomicHTMLToken&amp;);
-    void processEndTagForInTableBody(AtomicHTMLToken&amp;);
-    void processEndTagForInRow(AtomicHTMLToken&amp;);
-    void processEndTagForInCell(AtomicHTMLToken&amp;);
</del><ins>+    bool processStartTagForInHead(AtomicHTMLToken&amp;&amp;);
+    void processStartTagForInBody(AtomicHTMLToken&amp;&amp;);
+    void processStartTagForInTable(AtomicHTMLToken&amp;&amp;);
+    void processEndTagForInBody(AtomicHTMLToken&amp;&amp;);
+    void processEndTagForInTable(AtomicHTMLToken&amp;&amp;);
+    void processEndTagForInTableBody(AtomicHTMLToken&amp;&amp;);
+    void processEndTagForInRow(AtomicHTMLToken&amp;&amp;);
+    void processEndTagForInCell(AtomicHTMLToken&amp;&amp;);
</ins><span class="cx"> 
</span><del>-    void processHtmlStartTagForInBody(AtomicHTMLToken&amp;);
-    bool processBodyEndTagForInBody(AtomicHTMLToken&amp;);
</del><ins>+    void processHtmlStartTagForInBody(AtomicHTMLToken&amp;&amp;);
+    bool processBodyEndTagForInBody(AtomicHTMLToken&amp;&amp;);
</ins><span class="cx">     bool processTableEndTagForInTable();
</span><span class="cx">     bool processCaptionEndTagForInCaption();
</span><span class="cx">     bool processColgroupEndTagForInColumnGroup();
</span><span class="cx">     bool processTrEndTagForInRow();
</span><span class="cx"> 
</span><del>-    void processAnyOtherEndTagForInBody(AtomicHTMLToken&amp;);
</del><ins>+    void processAnyOtherEndTagForInBody(AtomicHTMLToken&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     void processCharacterBuffer(ExternalCharacterTokenBuffer&amp;);
</span><span class="cx">     inline void processCharacterBufferForInBody(ExternalCharacterTokenBuffer&amp;);
</span><span class="lines">@@ -144,9 +144,9 @@
</span><span class="cx">     void processFakeCharacters(const String&amp;);
</span><span class="cx">     void processFakePEndTagIfPInButtonScope();
</span><span class="cx"> 
</span><del>-    void processGenericRCDATAStartTag(AtomicHTMLToken&amp;);
-    void processGenericRawTextStartTag(AtomicHTMLToken&amp;);
-    void processScriptStartTag(AtomicHTMLToken&amp;);
</del><ins>+    void processGenericRCDATAStartTag(AtomicHTMLToken&amp;&amp;);
+    void processGenericRawTextStartTag(AtomicHTMLToken&amp;&amp;);
+    void processScriptStartTag(AtomicHTMLToken&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     // Default processing for the different insertion modes.
</span><span class="cx">     void defaultForInitial();
</span><span class="lines">@@ -157,8 +157,8 @@
</span><span class="cx">     void defaultForAfterHead();
</span><span class="cx">     void defaultForInTableText();
</span><span class="cx"> 
</span><del>-    bool shouldProcessTokenInForeignContent(AtomicHTMLToken&amp;);
-    void processTokenInForeignContent(AtomicHTMLToken&amp;);
</del><ins>+    bool shouldProcessTokenInForeignContent(const AtomicHTMLToken&amp;);
+    void processTokenInForeignContent(AtomicHTMLToken&amp;&amp;);
</ins><span class="cx">     
</span><span class="cx">     HTMLStackItem&amp; adjustedCurrentStackItem() const;
</span><span class="cx"> 
</span><span class="lines">@@ -166,17 +166,17 @@
</span><span class="cx"> 
</span><span class="cx">     void closeTheCell();
</span><span class="cx"> 
</span><del>-    template &lt;bool shouldClose(const HTMLStackItem&amp;)&gt; void processCloseWhenNestedTag(AtomicHTMLToken&amp;);
</del><ins>+    template &lt;bool shouldClose(const HTMLStackItem&amp;)&gt; void processCloseWhenNestedTag(AtomicHTMLToken&amp;&amp;);
</ins><span class="cx"> 
</span><del>-    void parseError(AtomicHTMLToken&amp;);
</del><ins>+    void parseError(const AtomicHTMLToken&amp;);
</ins><span class="cx"> 
</span><span class="cx">     void resetInsertionModeAppropriately();
</span><span class="cx"> 
</span><del>-    void insertGenericHTMLElement(AtomicHTMLToken&amp;);
</del><ins>+    void insertGenericHTMLElement(AtomicHTMLToken&amp;&amp;);
</ins><span class="cx"> 
</span><del>-    void processTemplateStartTag(AtomicHTMLToken&amp;);
-    bool processTemplateEndTag(AtomicHTMLToken&amp;);
-    bool processEndOfFileForInTemplateContents(AtomicHTMLToken&amp;);
</del><ins>+    void processTemplateStartTag(AtomicHTMLToken&amp;&amp;);
+    bool processTemplateEndTag(AtomicHTMLToken&amp;&amp;);
+    bool processEndOfFileForInTemplateContents(AtomicHTMLToken&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     class FragmentParsingContext {
</span><span class="cx">     public:
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlparserTextDocumentParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/parser/TextDocumentParser.cpp (208775 => 208776)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/parser/TextDocumentParser.cpp        2016-11-16 01:06:57 UTC (rev 208775)
+++ trunk/Source/WebCore/html/parser/TextDocumentParser.cpp        2016-11-16 01:16:31 UTC (rev 208776)
</span><span class="lines">@@ -53,7 +53,7 @@
</span><span class="cx">     Vector&lt;Attribute&gt; attributes;
</span><span class="cx">     attributes.append(Attribute(styleAttr, &quot;word-wrap: break-word; white-space: pre-wrap;&quot;));
</span><span class="cx">     AtomicHTMLToken fakePre(HTMLToken::StartTag, preTag.localName(), WTFMove(attributes));
</span><del>-    treeBuilder().constructTree(fakePre);
</del><ins>+    treeBuilder().constructTree(WTFMove(fakePre));
</ins><span class="cx"> 
</span><span class="cx">     // Normally we would skip the first \n after a &lt;pre&gt; element, but we don't
</span><span class="cx">     // want to skip the first \n for text documents!
</span></span></pre>
</div>
</div>

</body>
</html>