<!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>[208828] 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/208828">208828</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2016-11-16 16:39:55 -0800 (Wed, 16 Nov 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Use more references in TreeScope / TreeScopeAdopter
https://bugs.webkit.org/show_bug.cgi?id=164836

Reviewed by Ryosuke Niwa.

Use more references in TreeScope / TreeScopeAdopter and avoid some
unnecessary null checks.

No new tests, no Web-exposed behavior change.

* dom/ContainerNode.cpp:
(WebCore::ContainerNode::takeAllChildrenFrom):
(WebCore::ContainerNode::insertBefore):
(WebCore::ContainerNode::replaceChild):
(WebCore::ContainerNode::removeBetween):
(WebCore::ContainerNode::appendChildWithoutPreInsertionValidityCheck):
(WebCore::ContainerNode::parserAppendChild):
* dom/ContainerNodeAlgorithms.cpp:
(WebCore::addChildNodesToDeletionQueue):
* dom/Document.cpp:
(WebCore::Document::adoptNode):
(WebCore::Document::moveNodeIteratorsToNewDocument):
* dom/Document.h:
* dom/Element.cpp:
(WebCore::Element::didMoveToNewDocument):
(WebCore::Element::addShadowRoot):
(WebCore::Element::removeShadowRoot):
(WebCore::Element::setAttributeNode):
(WebCore::Element::setAttributeNodeNS):
(WebCore::Element::ensureAttr):
* dom/Element.h:
* dom/Node.cpp:
(WebCore::Node::didMoveToNewDocument):
* dom/Node.h:
* dom/NodeRareData.h:
(WebCore::NodeListsNodeData::adoptDocument):
* dom/TreeScope.cpp:
(WebCore::TreeScope::TreeScope):
(WebCore::TreeScope::setParentTreeScope):
(WebCore::TreeScope::adoptIfNeeded):
* dom/TreeScope.h:
(WebCore::TreeScope::documentScope):
(WebCore::TreeScope::setDocumentScope):
* dom/TreeScopeAdopter.cpp:
(WebCore::TreeScopeAdopter::moveTreeToNewScope):
(WebCore::TreeScopeAdopter::moveShadowTreeToNewDocument):
(WebCore::TreeScopeAdopter::ensureDidMoveToNewDocumentWasCalled):
(WebCore::TreeScopeAdopter::updateTreeScope):
(WebCore::TreeScopeAdopter::moveNodeToNewDocument):
* dom/TreeScopeAdopter.h:
(WebCore::TreeScopeAdopter::ensureDidMoveToNewDocumentWasCalled):
(WebCore::TreeScopeAdopter::TreeScopeAdopter):
* html/FormAssociatedElement.cpp:
(WebCore::FormAssociatedElement::didMoveToNewDocument):
* html/FormAssociatedElement.h:
* html/HTMLFieldSetElement.cpp:
(WebCore::HTMLFieldSetElement::didMoveToNewDocument):
* html/HTMLFieldSetElement.h:
* html/HTMLFormControlElement.cpp:
(WebCore::HTMLFormControlElement::didMoveToNewDocument):
* html/HTMLFormControlElement.h:
* html/HTMLFormElement.cpp:
(WebCore::HTMLFormElement::didMoveToNewDocument):
* html/HTMLFormElement.h:
* html/HTMLImageElement.cpp:
(WebCore::HTMLImageElement::didMoveToNewDocument):
* html/HTMLImageElement.h:
* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::didMoveToNewDocument):
* html/HTMLInputElement.h:
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::didMoveToNewDocument):
* html/HTMLMediaElement.h:
* html/HTMLObjectElement.cpp:
(WebCore::HTMLObjectElement::didMoveToNewDocument):
* html/HTMLObjectElement.h:
* html/HTMLPictureElement.cpp:
(WebCore::HTMLPictureElement::didMoveToNewDocument):
* html/HTMLPictureElement.h:
* html/HTMLPlugInImageElement.cpp:
(WebCore::HTMLPlugInImageElement::didMoveToNewDocument):
* html/HTMLPlugInImageElement.h:
* html/HTMLTemplateElement.cpp:
(WebCore::HTMLTemplateElement::didMoveToNewDocument):
* html/HTMLTemplateElement.h:
* html/HTMLVideoElement.cpp:
(WebCore::HTMLVideoElement::didMoveToNewDocument):
* html/HTMLVideoElement.h:
* html/ImageDocument.cpp:
(WebCore::ImageDocumentElement::didMoveToNewDocument):
* svg/SVGImageElement.cpp:
(WebCore::SVGImageElement::didMoveToNewDocument):
* svg/SVGImageElement.h:
* svg/SVGSVGElement.cpp:
(WebCore::SVGSVGElement::didMoveToNewDocument):
* svg/SVGSVGElement.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoredomContainerNodecpp">trunk/Source/WebCore/dom/ContainerNode.cpp</a></li>
<li><a href="#trunkSourceWebCoredomContainerNodeAlgorithmscpp">trunk/Source/WebCore/dom/ContainerNodeAlgorithms.cpp</a></li>
<li><a href="#trunkSourceWebCoredomDocumentcpp">trunk/Source/WebCore/dom/Document.cpp</a></li>
<li><a href="#trunkSourceWebCoredomDocumenth">trunk/Source/WebCore/dom/Document.h</a></li>
<li><a href="#trunkSourceWebCoredomElementcpp">trunk/Source/WebCore/dom/Element.cpp</a></li>
<li><a href="#trunkSourceWebCoredomElementh">trunk/Source/WebCore/dom/Element.h</a></li>
<li><a href="#trunkSourceWebCoredomNodecpp">trunk/Source/WebCore/dom/Node.cpp</a></li>
<li><a href="#trunkSourceWebCoredomNodeh">trunk/Source/WebCore/dom/Node.h</a></li>
<li><a href="#trunkSourceWebCoredomNodeRareDatah">trunk/Source/WebCore/dom/NodeRareData.h</a></li>
<li><a href="#trunkSourceWebCoredomTreeScopecpp">trunk/Source/WebCore/dom/TreeScope.cpp</a></li>
<li><a href="#trunkSourceWebCoredomTreeScopeh">trunk/Source/WebCore/dom/TreeScope.h</a></li>
<li><a href="#trunkSourceWebCoredomTreeScopeAdoptercpp">trunk/Source/WebCore/dom/TreeScopeAdopter.cpp</a></li>
<li><a href="#trunkSourceWebCoredomTreeScopeAdopterh">trunk/Source/WebCore/dom/TreeScopeAdopter.h</a></li>
<li><a href="#trunkSourceWebCorehtmlFormAssociatedElementcpp">trunk/Source/WebCore/html/FormAssociatedElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlFormAssociatedElementh">trunk/Source/WebCore/html/FormAssociatedElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLFieldSetElementcpp">trunk/Source/WebCore/html/HTMLFieldSetElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLFieldSetElementh">trunk/Source/WebCore/html/HTMLFieldSetElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLFormControlElementcpp">trunk/Source/WebCore/html/HTMLFormControlElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLFormControlElementh">trunk/Source/WebCore/html/HTMLFormControlElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLFormElementcpp">trunk/Source/WebCore/html/HTMLFormElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLFormElementh">trunk/Source/WebCore/html/HTMLFormElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLImageElementcpp">trunk/Source/WebCore/html/HTMLImageElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLImageElementh">trunk/Source/WebCore/html/HTMLImageElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLInputElementcpp">trunk/Source/WebCore/html/HTMLInputElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLInputElementh">trunk/Source/WebCore/html/HTMLInputElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLMediaElementcpp">trunk/Source/WebCore/html/HTMLMediaElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLMediaElementh">trunk/Source/WebCore/html/HTMLMediaElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLObjectElementcpp">trunk/Source/WebCore/html/HTMLObjectElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLObjectElementh">trunk/Source/WebCore/html/HTMLObjectElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLPictureElementcpp">trunk/Source/WebCore/html/HTMLPictureElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLPictureElementh">trunk/Source/WebCore/html/HTMLPictureElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLPlugInImageElementcpp">trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLPlugInImageElementh">trunk/Source/WebCore/html/HTMLPlugInImageElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLTemplateElementcpp">trunk/Source/WebCore/html/HTMLTemplateElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLTemplateElementh">trunk/Source/WebCore/html/HTMLTemplateElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLVideoElementcpp">trunk/Source/WebCore/html/HTMLVideoElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLVideoElementh">trunk/Source/WebCore/html/HTMLVideoElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlImageDocumentcpp">trunk/Source/WebCore/html/ImageDocument.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGImageElementcpp">trunk/Source/WebCore/svg/SVGImageElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGImageElementh">trunk/Source/WebCore/svg/SVGImageElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSVGElementcpp">trunk/Source/WebCore/svg/SVGSVGElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSVGElementh">trunk/Source/WebCore/svg/SVGSVGElement.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/ChangeLog        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -1,3 +1,102 @@
</span><ins>+2016-11-16  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Use more references in TreeScope / TreeScopeAdopter
+        https://bugs.webkit.org/show_bug.cgi?id=164836
+
+        Reviewed by Ryosuke Niwa.
+
+        Use more references in TreeScope / TreeScopeAdopter and avoid some
+        unnecessary null checks.
+
+        No new tests, no Web-exposed behavior change.
+
+        * dom/ContainerNode.cpp:
+        (WebCore::ContainerNode::takeAllChildrenFrom):
+        (WebCore::ContainerNode::insertBefore):
+        (WebCore::ContainerNode::replaceChild):
+        (WebCore::ContainerNode::removeBetween):
+        (WebCore::ContainerNode::appendChildWithoutPreInsertionValidityCheck):
+        (WebCore::ContainerNode::parserAppendChild):
+        * dom/ContainerNodeAlgorithms.cpp:
+        (WebCore::addChildNodesToDeletionQueue):
+        * dom/Document.cpp:
+        (WebCore::Document::adoptNode):
+        (WebCore::Document::moveNodeIteratorsToNewDocument):
+        * dom/Document.h:
+        * dom/Element.cpp:
+        (WebCore::Element::didMoveToNewDocument):
+        (WebCore::Element::addShadowRoot):
+        (WebCore::Element::removeShadowRoot):
+        (WebCore::Element::setAttributeNode):
+        (WebCore::Element::setAttributeNodeNS):
+        (WebCore::Element::ensureAttr):
+        * dom/Element.h:
+        * dom/Node.cpp:
+        (WebCore::Node::didMoveToNewDocument):
+        * dom/Node.h:
+        * dom/NodeRareData.h:
+        (WebCore::NodeListsNodeData::adoptDocument):
+        * dom/TreeScope.cpp:
+        (WebCore::TreeScope::TreeScope):
+        (WebCore::TreeScope::setParentTreeScope):
+        (WebCore::TreeScope::adoptIfNeeded):
+        * dom/TreeScope.h:
+        (WebCore::TreeScope::documentScope):
+        (WebCore::TreeScope::setDocumentScope):
+        * dom/TreeScopeAdopter.cpp:
+        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
+        (WebCore::TreeScopeAdopter::moveShadowTreeToNewDocument):
+        (WebCore::TreeScopeAdopter::ensureDidMoveToNewDocumentWasCalled):
+        (WebCore::TreeScopeAdopter::updateTreeScope):
+        (WebCore::TreeScopeAdopter::moveNodeToNewDocument):
+        * dom/TreeScopeAdopter.h:
+        (WebCore::TreeScopeAdopter::ensureDidMoveToNewDocumentWasCalled):
+        (WebCore::TreeScopeAdopter::TreeScopeAdopter):
+        * html/FormAssociatedElement.cpp:
+        (WebCore::FormAssociatedElement::didMoveToNewDocument):
+        * html/FormAssociatedElement.h:
+        * html/HTMLFieldSetElement.cpp:
+        (WebCore::HTMLFieldSetElement::didMoveToNewDocument):
+        * html/HTMLFieldSetElement.h:
+        * html/HTMLFormControlElement.cpp:
+        (WebCore::HTMLFormControlElement::didMoveToNewDocument):
+        * html/HTMLFormControlElement.h:
+        * html/HTMLFormElement.cpp:
+        (WebCore::HTMLFormElement::didMoveToNewDocument):
+        * html/HTMLFormElement.h:
+        * html/HTMLImageElement.cpp:
+        (WebCore::HTMLImageElement::didMoveToNewDocument):
+        * html/HTMLImageElement.h:
+        * html/HTMLInputElement.cpp:
+        (WebCore::HTMLInputElement::didMoveToNewDocument):
+        * html/HTMLInputElement.h:
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::didMoveToNewDocument):
+        * html/HTMLMediaElement.h:
+        * html/HTMLObjectElement.cpp:
+        (WebCore::HTMLObjectElement::didMoveToNewDocument):
+        * html/HTMLObjectElement.h:
+        * html/HTMLPictureElement.cpp:
+        (WebCore::HTMLPictureElement::didMoveToNewDocument):
+        * html/HTMLPictureElement.h:
+        * html/HTMLPlugInImageElement.cpp:
+        (WebCore::HTMLPlugInImageElement::didMoveToNewDocument):
+        * html/HTMLPlugInImageElement.h:
+        * html/HTMLTemplateElement.cpp:
+        (WebCore::HTMLTemplateElement::didMoveToNewDocument):
+        * html/HTMLTemplateElement.h:
+        * html/HTMLVideoElement.cpp:
+        (WebCore::HTMLVideoElement::didMoveToNewDocument):
+        * html/HTMLVideoElement.h:
+        * html/ImageDocument.cpp:
+        (WebCore::ImageDocumentElement::didMoveToNewDocument):
+        * svg/SVGImageElement.cpp:
+        (WebCore::SVGImageElement::didMoveToNewDocument):
+        * svg/SVGImageElement.h:
+        * svg/SVGSVGElement.cpp:
+        (WebCore::SVGSVGElement::didMoveToNewDocument):
+        * svg/SVGSVGElement.h:
+
</ins><span class="cx"> 2016-11-16  Jon Davis  &lt;jond@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Added Web App Manifest to the Feature Status page.
</span></span></pre></div>
<a id="trunkSourceWebCoredomContainerNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/ContainerNode.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/ContainerNode.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/dom/ContainerNode.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -139,12 +139,12 @@
</span><span class="cx">         destroyRenderTreeIfNeeded(child);
</span><span class="cx"> 
</span><span class="cx">         // FIXME: We need a no mutation event version of adoptNode.
</span><del>-        RefPtr&lt;Node&gt; adoptedChild = document().adoptNode(child).releaseReturnValue();
-        parserAppendChild(*adoptedChild);
</del><ins>+        auto adoptedChild = document().adoptNode(child).releaseReturnValue();
+        parserAppendChild(adoptedChild);
</ins><span class="cx">         // FIXME: Together with adoptNode above, the tree scope might get updated recursively twice
</span><span class="cx">         // (if the document changed or oldParent was in a shadow tree, AND *this is in a shadow tree).
</span><span class="cx">         // Can we do better?
</span><del>-        treeScope().adoptIfNeeded(adoptedChild.get());
</del><ins>+        treeScope().adoptIfNeeded(adoptedChild);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -280,7 +280,7 @@
</span><span class="cx">         if (child-&gt;parentNode())
</span><span class="cx">             break;
</span><span class="cx"> 
</span><del>-        treeScope().adoptIfNeeded(child.ptr());
</del><ins>+        treeScope().adoptIfNeeded(child);
</ins><span class="cx"> 
</span><span class="cx">         insertBeforeCommon(next, child);
</span><span class="cx"> 
</span><span class="lines">@@ -444,7 +444,7 @@
</span><span class="cx">         if (child-&gt;parentNode())
</span><span class="cx">             break;
</span><span class="cx"> 
</span><del>-        treeScope().adoptIfNeeded(child.ptr());
</del><ins>+        treeScope().adoptIfNeeded(child);
</ins><span class="cx"> 
</span><span class="cx">         {
</span><span class="cx">             NoEventDispatchAssertion assertNoEventDispatch;
</span><span class="lines">@@ -579,7 +579,7 @@
</span><span class="cx">     ASSERT(!oldChild.nextSibling());
</span><span class="cx">     oldChild.setParentNode(nullptr);
</span><span class="cx"> 
</span><del>-    document().adoptIfNeeded(&amp;oldChild);
</del><ins>+    document().adoptIfNeeded(oldChild);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ContainerNode::parserRemoveChild(Node&amp; oldChild)
</span><span class="lines">@@ -679,7 +679,7 @@
</span><span class="cx">         if (child-&gt;parentNode())
</span><span class="cx">             break;
</span><span class="cx"> 
</span><del>-        treeScope().adoptIfNeeded(child.ptr());
</del><ins>+        treeScope().adoptIfNeeded(child);
</ins><span class="cx"> 
</span><span class="cx">         // Append child to the end of the list
</span><span class="cx">         {
</span><span class="lines">@@ -706,7 +706,7 @@
</span><span class="cx">     {
</span><span class="cx">         NoEventDispatchAssertion assertNoEventDispatch;
</span><span class="cx">         appendChildCommon(newChild);
</span><del>-        treeScope().adoptIfNeeded(&amp;newChild);
</del><ins>+        treeScope().adoptIfNeeded(newChild);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     newChild.updateAncestorConnectedSubframeCountForInsertion();
</span></span></pre></div>
<a id="trunkSourceWebCoredomContainerNodeAlgorithmscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/ContainerNodeAlgorithms.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/ContainerNodeAlgorithms.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/dom/ContainerNodeAlgorithms.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -190,7 +190,7 @@
</span><span class="cx">         } else {
</span><span class="cx">             Ref&lt;Node&gt; protect(*node); // removedFromDocument may remove remove all references to this node.
</span><span class="cx">             if (Document* containerDocument = container.ownerDocument())
</span><del>-                containerDocument-&gt;adoptIfNeeded(node);
</del><ins>+                containerDocument-&gt;adoptIfNeeded(*node);
</ins><span class="cx">             if (node-&gt;isInTreeScope())
</span><span class="cx">                 notifyChildNodeRemoved(container, *node);
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/dom/Document.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -1024,7 +1024,7 @@
</span><span class="cx">             return result.releaseException();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    adoptIfNeeded(&amp;source);
</del><ins>+    adoptIfNeeded(source);
</ins><span class="cx"> 
</span><span class="cx">     return Ref&lt;Node&gt; { source };
</span><span class="cx"> }
</span><span class="lines">@@ -3865,14 +3865,14 @@
</span><span class="cx">     m_nodeIterators.remove(ni);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Document::moveNodeIteratorsToNewDocument(Node* node, Document* newDocument)
</del><ins>+void Document::moveNodeIteratorsToNewDocument(Node&amp; node, Document&amp; newDocument)
</ins><span class="cx"> {
</span><span class="cx">     Vector&lt;NodeIterator*&gt; nodeIterators;
</span><span class="cx">     copyToVector(m_nodeIterators, nodeIterators);
</span><span class="cx">     for (auto* it : nodeIterators) {
</span><del>-        if (&amp;it-&gt;root() == node) {
</del><ins>+        if (&amp;it-&gt;root() == &amp;node) {
</ins><span class="cx">             detachNodeIterator(it);
</span><del>-            newDocument-&gt;attachNodeIterator(it);
</del><ins>+            newDocument.attachNodeIterator(it);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/dom/Document.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -735,7 +735,7 @@
</span><span class="cx"> 
</span><span class="cx">     void attachNodeIterator(NodeIterator*);
</span><span class="cx">     void detachNodeIterator(NodeIterator*);
</span><del>-    void moveNodeIteratorsToNewDocument(Node*, Document*);
</del><ins>+    void moveNodeIteratorsToNewDocument(Node&amp;, Document&amp;);
</ins><span class="cx"> 
</span><span class="cx">     void attachRange(Range*);
</span><span class="cx">     void detachRange(Range*);
</span></span></pre></div>
<a id="trunkSourceWebCoredomElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Element.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Element.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/dom/Element.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -1531,11 +1531,11 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Element::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void Element::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><span class="cx">     Node::didMoveToNewDocument(oldDocument);
</span><span class="cx"> 
</span><del>-    if (oldDocument-&gt;inQuirksMode() != document().inQuirksMode()) {
</del><ins>+    if (oldDocument.inQuirksMode() != document().inQuirksMode()) {
</ins><span class="cx">         // ElementData::m_classNames or ElementData::m_idForStyleResolution need to be updated with the right case.
</span><span class="cx">         if (hasID())
</span><span class="cx">             attributeChanged(idAttr, nullAtom, getIdAttribute());
</span><span class="lines">@@ -1544,7 +1544,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (UNLIKELY(isDefinedCustomElement()))
</span><del>-        CustomElementReactionQueue::enqueueAdoptedCallbackIfNeeded(*this, *oldDocument, document());
</del><ins>+        CustomElementReactionQueue::enqueueAdoptedCallbackIfNeeded(*this, oldDocument, document());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool Element::hasAttributes() const
</span><span class="lines">@@ -1746,7 +1746,7 @@
</span><span class="cx">     ensureElementRareData().setShadowRoot(WTFMove(newShadowRoot));
</span><span class="cx"> 
</span><span class="cx">     shadowRoot.setHost(this);
</span><del>-    shadowRoot.setParentTreeScope(&amp;treeScope());
</del><ins>+    shadowRoot.setParentTreeScope(treeScope());
</ins><span class="cx"> 
</span><span class="cx">     NodeVector postInsertionNotificationTargets;
</span><span class="cx">     notifyChildNodeInserted(*this, shadowRoot, postInsertionNotificationTargets);
</span><span class="lines">@@ -1775,7 +1775,7 @@
</span><span class="cx">     elementRareData()-&gt;clearShadowRoot();
</span><span class="cx"> 
</span><span class="cx">     oldRoot-&gt;setHost(nullptr);
</span><del>-    oldRoot-&gt;setParentTreeScope(&amp;document());
</del><ins>+    oldRoot-&gt;setParentTreeScope(document());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static bool canAttachAuthorShadowRoot(const Element&amp; element)
</span><span class="lines">@@ -2147,7 +2147,7 @@
</span><span class="cx">     }
</span><span class="cx">     if (attrNode.ownerElement() != this) {
</span><span class="cx">         attrNode.attachToElement(*this);
</span><del>-        treeScope().adoptIfNeeded(&amp;attrNode);
</del><ins>+        treeScope().adoptIfNeeded(attrNode);
</ins><span class="cx">         ensureAttrNodeListForElement(*this).append(&amp;attrNode);
</span><span class="cx">     }
</span><span class="cx">     return WTFMove(oldAttrNode);
</span><span class="lines">@@ -2178,7 +2178,7 @@
</span><span class="cx">     setAttributeInternal(index, attrNode.qualifiedName(), attrNode.value(), NotInSynchronizationOfLazyAttribute);
</span><span class="cx"> 
</span><span class="cx">     attrNode.attachToElement(*this);
</span><del>-    treeScope().adoptIfNeeded(&amp;attrNode);
</del><ins>+    treeScope().adoptIfNeeded(attrNode);
</ins><span class="cx">     ensureAttrNodeListForElement(*this).append(&amp;attrNode);
</span><span class="cx"> 
</span><span class="cx">     return WTFMove(oldAttrNode);
</span><span class="lines">@@ -3389,7 +3389,7 @@
</span><span class="cx">     RefPtr&lt;Attr&gt; attrNode = findAttrNodeInList(attrNodeList, name);
</span><span class="cx">     if (!attrNode) {
</span><span class="cx">         attrNode = Attr::create(*this, name);
</span><del>-        treeScope().adoptIfNeeded(attrNode.get());
</del><ins>+        treeScope().adoptIfNeeded(*attrNode);
</ins><span class="cx">         attrNodeList.append(attrNode);
</span><span class="cx">     }
</span><span class="cx">     return attrNode.releaseNonNull();
</span></span></pre></div>
<a id="trunkSourceWebCoredomElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Element.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Element.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/dom/Element.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -586,7 +586,7 @@
</span><span class="cx">     void childrenChanged(const ChildChange&amp;) override;
</span><span class="cx">     void removeAllEventListeners() final;
</span><span class="cx">     virtual void parserDidSetAttributes();
</span><del>-    void didMoveToNewDocument(Document*) override;
</del><ins>+    void didMoveToNewDocument(Document&amp;) override;
</ins><span class="cx"> 
</span><span class="cx">     void clearTabIndexExplicitlyIfNeeded();
</span><span class="cx">     void setTabIndexExplicitly(int);
</span></span></pre></div>
<a id="trunkSourceWebCoredomNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Node.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Node.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/dom/Node.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -1864,7 +1864,7 @@
</span><span class="cx">     return NodeEventTargetInterfaceType;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Node::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void Node::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><span class="cx">     TreeScopeAdopter::ensureDidMoveToNewDocumentWasCalled(oldDocument);
</span><span class="cx"> 
</span><span class="lines">@@ -1875,14 +1875,14 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (AXObjectCache::accessibilityEnabled() &amp;&amp; oldDocument) {
-        if (auto* cache = oldDocument-&gt;existingAXObjectCache())
</del><ins>+    if (AXObjectCache::accessibilityEnabled()) {
+        if (auto* cache = oldDocument.existingAXObjectCache())
</ins><span class="cx">             cache-&gt;remove(this);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     unsigned numWheelEventHandlers = eventListeners(eventNames().mousewheelEvent).size() + eventListeners(eventNames().wheelEvent).size();
</span><span class="cx">     for (unsigned i = 0; i &lt; numWheelEventHandlers; ++i) {
</span><del>-        oldDocument-&gt;didRemoveWheelEventHandler(*this);
</del><ins>+        oldDocument.didRemoveWheelEventHandler(*this);
</ins><span class="cx">         document().didAddWheelEventHandler(*this);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -1891,7 +1891,7 @@
</span><span class="cx">         numTouchEventHandlers += eventListeners(name).size();
</span><span class="cx"> 
</span><span class="cx">     for (unsigned i = 0; i &lt; numTouchEventHandlers; ++i) {
</span><del>-        oldDocument-&gt;didRemoveTouchEventHandler(*this);
</del><ins>+        oldDocument.didRemoveTouchEventHandler(*this);
</ins><span class="cx">         document().didAddTouchEventHandler(*this);
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoredomNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Node.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Node.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/dom/Node.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -628,7 +628,7 @@
</span><span class="cx">     };
</span><span class="cx">     Node(Document&amp;, ConstructionType);
</span><span class="cx"> 
</span><del>-    virtual void didMoveToNewDocument(Document* oldDocument);
</del><ins>+    virtual void didMoveToNewDocument(Document&amp; oldDocument);
</ins><span class="cx">     
</span><span class="cx">     virtual void addSubresourceAttributeURLs(ListHashSet&lt;URL&gt;&amp;) const { }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoredomNodeRareDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/NodeRareData.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/NodeRareData.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/dom/NodeRareData.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -202,24 +202,23 @@
</span><span class="cx">         invalidateCaches();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void adoptDocument(Document* oldDocument, Document* newDocument)
</del><ins>+    void adoptDocument(Document&amp; oldDocument, Document&amp; newDocument)
</ins><span class="cx">     {
</span><del>-        ASSERT(oldDocument);
-        if (oldDocument == newDocument) {
</del><ins>+        if (&amp;oldDocument == &amp;newDocument) {
</ins><span class="cx">             invalidateCaches();
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         for (auto&amp; cache : m_atomicNameCaches.values())
</span><del>-            cache-&gt;invalidateCache(*oldDocument);
</del><ins>+            cache-&gt;invalidateCache(oldDocument);
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; list : m_tagCollectionNSCache.values()) {
</span><span class="cx">             ASSERT(!list-&gt;isRootedAtDocument());
</span><del>-            list-&gt;invalidateCache(*oldDocument);
</del><ins>+            list-&gt;invalidateCache(oldDocument);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         for (auto&amp; collection : m_cachedCollections.values())
</span><del>-            collection-&gt;invalidateCache(*oldDocument);
</del><ins>+            collection-&gt;invalidateCache(oldDocument);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span></span></pre></div>
<a id="trunkSourceWebCoredomTreeScopecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/TreeScope.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/TreeScope.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/dom/TreeScope.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -57,7 +57,7 @@
</span><span class="cx"> 
</span><span class="cx"> TreeScope::TreeScope(ShadowRoot&amp; shadowRoot, Document&amp; document)
</span><span class="cx">     : m_rootNode(shadowRoot)
</span><del>-    , m_documentScope(&amp;document)
</del><ins>+    , m_documentScope(document)
</ins><span class="cx">     , m_parentTreeScope(&amp;document)
</span><span class="cx">     , m_idTargetObserverRegistry(std::make_unique&lt;IdTargetObserverRegistry&gt;())
</span><span class="cx"> {
</span><span class="lines">@@ -66,7 +66,7 @@
</span><span class="cx"> 
</span><span class="cx"> TreeScope::TreeScope(Document&amp; document)
</span><span class="cx">     : m_rootNode(document)
</span><del>-    , m_documentScope(&amp;document)
</del><ins>+    , m_documentScope(document)
</ins><span class="cx">     , m_parentTreeScope(nullptr)
</span><span class="cx">     , m_idTargetObserverRegistry(std::make_unique&lt;IdTargetObserverRegistry&gt;())
</span><span class="cx"> {
</span><span class="lines">@@ -84,15 +84,13 @@
</span><span class="cx">     m_labelsByForAttribute = nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void TreeScope::setParentTreeScope(TreeScope* newParentScope)
</del><ins>+void TreeScope::setParentTreeScope(TreeScope&amp; newParentScope)
</ins><span class="cx"> {
</span><span class="cx">     // A document node cannot be re-parented.
</span><span class="cx">     ASSERT(!m_rootNode.isDocumentNode());
</span><del>-    // Every scope other than document needs a parent scope.
-    ASSERT(newParentScope);
</del><span class="cx"> 
</span><del>-    m_parentTreeScope = newParentScope;
-    setDocumentScope(&amp;newParentScope-&gt;documentScope());
</del><ins>+    m_parentTreeScope = &amp;newParentScope;
+    setDocumentScope(newParentScope.documentScope());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> Element* TreeScope::getElementById(const AtomicString&amp; elementId) const
</span><span class="lines">@@ -348,11 +346,10 @@
</span><span class="cx">     return nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void TreeScope::adoptIfNeeded(Node* node)
</del><ins>+void TreeScope::adoptIfNeeded(Node&amp; node)
</ins><span class="cx"> {
</span><del>-    ASSERT(node);
-    ASSERT(!node-&gt;isDocumentNode());
-    ASSERT(!node-&gt;m_deletionHasBegun);
</del><ins>+    ASSERT(!node.isDocumentNode());
+    ASSERT(!node.m_deletionHasBegun);
</ins><span class="cx">     TreeScopeAdopter adopter(node, *this);
</span><span class="cx">     if (adopter.needsScopeChange())
</span><span class="cx">         adopter.execute();
</span></span></pre></div>
<a id="trunkSourceWebCoredomTreeScopeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/TreeScope.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/TreeScope.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/dom/TreeScope.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -49,7 +49,7 @@
</span><span class="cx"> 
</span><span class="cx"> public:
</span><span class="cx">     TreeScope* parentTreeScope() const { return m_parentTreeScope; }
</span><del>-    void setParentTreeScope(TreeScope*);
</del><ins>+    void setParentTreeScope(TreeScope&amp;);
</ins><span class="cx"> 
</span><span class="cx">     Element* focusedElement();
</span><span class="cx">     WEBCORE_EXPORT Element* getElementById(const AtomicString&amp;) const;
</span><span class="lines">@@ -66,7 +66,7 @@
</span><span class="cx">     void addElementByName(const AtomicStringImpl&amp;, Element&amp;);
</span><span class="cx">     void removeElementByName(const AtomicStringImpl&amp;, Element&amp;);
</span><span class="cx"> 
</span><del>-    Document&amp; documentScope() const { return *m_documentScope; }
</del><ins>+    Document&amp; documentScope() const { return m_documentScope.get(); }
</ins><span class="cx">     static ptrdiff_t documentScopeMemoryOffset() { return OBJECT_OFFSETOF(TreeScope, m_documentScope); }
</span><span class="cx"> 
</span><span class="cx">     // https://dom.spec.whatwg.org/#retarget
</span><span class="lines">@@ -94,7 +94,7 @@
</span><span class="cx">     Element* findAnchor(const String&amp; name);
</span><span class="cx"> 
</span><span class="cx">     // Used by the basic DOM mutation methods (e.g., appendChild()).
</span><del>-    void adoptIfNeeded(Node*);
</del><ins>+    void adoptIfNeeded(Node&amp;);
</ins><span class="cx"> 
</span><span class="cx">     ContainerNode&amp; rootNode() const { return m_rootNode; }
</span><span class="cx"> 
</span><span class="lines">@@ -106,9 +106,8 @@
</span><span class="cx">     ~TreeScope();
</span><span class="cx"> 
</span><span class="cx">     void destroyTreeScopeData();
</span><del>-    void setDocumentScope(Document* document)
</del><ins>+    void setDocumentScope(Document&amp; document)
</ins><span class="cx">     {
</span><del>-        ASSERT(document);
</del><span class="cx">         m_documentScope = document;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -116,7 +115,7 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     ContainerNode&amp; m_rootNode;
</span><del>-    Document* m_documentScope;
</del><ins>+    std::reference_wrapper&lt;Document&gt; m_documentScope;
</ins><span class="cx">     TreeScope* m_parentTreeScope;
</span><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;DocumentOrderedMap&gt; m_elementsById;
</span></span></pre></div>
<a id="trunkSourceWebCoredomTreeScopeAdoptercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/TreeScopeAdopter.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/TreeScopeAdopter.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/dom/TreeScopeAdopter.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -33,7 +33,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> // FIXME: Do we ever change tree scopes except between documents?
</span><del>-void TreeScopeAdopter::moveTreeToNewScope(Node* root) const
</del><ins>+void TreeScopeAdopter::moveTreeToNewScope(Node&amp; root) const
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(needsScopeChange());
</span><span class="cx"> 
</span><span class="lines">@@ -49,11 +49,11 @@
</span><span class="cx">         oldDocument.incDOMTreeVersion();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    for (Node* node = root; node; node = NodeTraversal::next(*node, root)) {
-        updateTreeScope(node);
</del><ins>+    for (Node* node = &amp;root; node; node = NodeTraversal::next(*node, &amp;root)) {
+        updateTreeScope(*node);
</ins><span class="cx"> 
</span><span class="cx">         if (willMoveToNewDocument)
</span><del>-            moveNodeToNewDocument(node, &amp;oldDocument, &amp;newDocument);
</del><ins>+            moveNodeToNewDocument(*node, oldDocument, newDocument);
</ins><span class="cx">         else if (node-&gt;hasRareData()) {
</span><span class="cx">             NodeRareData* rareData = node-&gt;rareData();
</span><span class="cx">             if (rareData-&gt;nodeLists())
</span><span class="lines">@@ -65,13 +65,13 @@
</span><span class="cx"> 
</span><span class="cx">         if (node-&gt;hasSyntheticAttrChildNodes()) {
</span><span class="cx">             for (auto&amp; attr : downcast&lt;Element&gt;(*node).attrNodeList())
</span><del>-                moveTreeToNewScope(attr.get());
</del><ins>+                moveTreeToNewScope(*attr);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        if (ShadowRoot* shadow = node-&gt;shadowRoot()) {
-            shadow-&gt;setParentTreeScope(&amp;m_newScope);
</del><ins>+        if (auto* shadow = node-&gt;shadowRoot()) {
+            shadow-&gt;setParentTreeScope(m_newScope);
</ins><span class="cx">             if (willMoveToNewDocument)
</span><del>-                moveShadowTreeToNewDocument(shadow, &amp;oldDocument, &amp;newDocument);
</del><ins>+                moveShadowTreeToNewDocument(*shadow, oldDocument, newDocument);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -79,12 +79,12 @@
</span><span class="cx">         oldDocument.decrementReferencingNodeCount();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void TreeScopeAdopter::moveShadowTreeToNewDocument(ShadowRoot* shadowRoot, Document* oldDocument, Document* newDocument) const
</del><ins>+void TreeScopeAdopter::moveShadowTreeToNewDocument(ShadowRoot&amp; shadowRoot, Document&amp; oldDocument, Document&amp; newDocument) const
</ins><span class="cx"> {
</span><del>-    for (Node* node = shadowRoot; node; node = NodeTraversal::next(*node, shadowRoot)) {
-        moveNodeToNewDocument(node, oldDocument, newDocument);
-        if (ShadowRoot* shadow = node-&gt;shadowRoot())
-            moveShadowTreeToNewDocument(shadow, oldDocument, newDocument);
</del><ins>+    for (Node* node = &amp;shadowRoot; node; node = NodeTraversal::next(*node, &amp;shadowRoot)) {
+        moveNodeToNewDocument(*node, oldDocument, newDocument);
+        if (auto* shadow = node-&gt;shadowRoot())
+            moveShadowTreeToNewDocument(*shadow, oldDocument, newDocument);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -92,46 +92,45 @@
</span><span class="cx"> static bool didMoveToNewDocumentWasCalled = false;
</span><span class="cx"> static Document* oldDocumentDidMoveToNewDocumentWasCalledWith = nullptr;
</span><span class="cx"> 
</span><del>-void TreeScopeAdopter::ensureDidMoveToNewDocumentWasCalled(Document* oldDocument)
</del><ins>+void TreeScopeAdopter::ensureDidMoveToNewDocumentWasCalled(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!didMoveToNewDocumentWasCalled);
</span><del>-    ASSERT_UNUSED(oldDocument, oldDocument == oldDocumentDidMoveToNewDocumentWasCalledWith);
</del><ins>+    ASSERT_UNUSED(oldDocument, &amp;oldDocument == oldDocumentDidMoveToNewDocumentWasCalledWith);
</ins><span class="cx">     didMoveToNewDocumentWasCalled = true;
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-inline void TreeScopeAdopter::updateTreeScope(Node* node) const
</del><ins>+inline void TreeScopeAdopter::updateTreeScope(Node&amp; node) const
</ins><span class="cx"> {
</span><del>-    ASSERT(!node-&gt;isTreeScope());
-    ASSERT(&amp;node-&gt;treeScope() == &amp;m_oldScope);
-    node-&gt;setTreeScope(m_newScope);
</del><ins>+    ASSERT(!node.isTreeScope());
+    ASSERT(&amp;node.treeScope() == &amp;m_oldScope);
+    node.setTreeScope(m_newScope);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline void TreeScopeAdopter::moveNodeToNewDocument(Node* node, Document* oldDocument, Document* newDocument) const
</del><ins>+inline void TreeScopeAdopter::moveNodeToNewDocument(Node&amp; node, Document&amp; oldDocument, Document&amp; newDocument) const
</ins><span class="cx"> {
</span><del>-    ASSERT(!node-&gt;inDocument() || oldDocument != newDocument);
</del><ins>+    ASSERT(!node.inDocument() || &amp;oldDocument != &amp;newDocument);
</ins><span class="cx"> 
</span><del>-    newDocument-&gt;incrementReferencingNodeCount();
-    oldDocument-&gt;decrementReferencingNodeCount();
</del><ins>+    newDocument.incrementReferencingNodeCount();
+    oldDocument.decrementReferencingNodeCount();
</ins><span class="cx"> 
</span><del>-    if (node-&gt;hasRareData()) {
-        NodeRareData* rareData = node-&gt;rareData();
-        if (rareData-&gt;nodeLists())
-            rareData-&gt;nodeLists()-&gt;adoptDocument(oldDocument, newDocument);
</del><ins>+    if (node.hasRareData()) {
+        NodeRareData* rareData = node.rareData();
+        if (auto* nodeLists = rareData-&gt;nodeLists())
+            nodeLists-&gt;adoptDocument(oldDocument, newDocument);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (oldDocument)
-        oldDocument-&gt;moveNodeIteratorsToNewDocument(node, newDocument);
</del><ins>+    oldDocument.moveNodeIteratorsToNewDocument(node, newDocument);
</ins><span class="cx"> 
</span><del>-    if (is&lt;ShadowRoot&gt;(*node))
-        downcast&lt;ShadowRoot&gt;(*node).setDocumentScope(newDocument);
</del><ins>+    if (is&lt;ShadowRoot&gt;(node))
+        downcast&lt;ShadowRoot&gt;(node).setDocumentScope(newDocument);
</ins><span class="cx"> 
</span><span class="cx"> #ifndef NDEBUG
</span><span class="cx">     didMoveToNewDocumentWasCalled = false;
</span><del>-    oldDocumentDidMoveToNewDocumentWasCalledWith = oldDocument;
</del><ins>+    oldDocumentDidMoveToNewDocumentWasCalledWith = &amp;oldDocument;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    node-&gt;didMoveToNewDocument(oldDocument);
</del><ins>+    node.didMoveToNewDocument(oldDocument);
</ins><span class="cx">     ASSERT(didMoveToNewDocumentWasCalled);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoredomTreeScopeAdopterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/TreeScopeAdopter.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/TreeScopeAdopter.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/dom/TreeScopeAdopter.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -33,32 +33,32 @@
</span><span class="cx"> 
</span><span class="cx"> class TreeScopeAdopter {
</span><span class="cx"> public:
</span><del>-    explicit TreeScopeAdopter(Node* toAdopt, TreeScope&amp; newScope);
</del><ins>+    explicit TreeScopeAdopter(Node&amp; toAdopt, TreeScope&amp; newScope);
</ins><span class="cx"> 
</span><span class="cx">     void execute() const { moveTreeToNewScope(m_toAdopt); }
</span><span class="cx">     bool needsScopeChange() const { return &amp;m_oldScope != &amp;m_newScope; }
</span><span class="cx"> 
</span><span class="cx"> #ifdef NDEBUG
</span><del>-    static void ensureDidMoveToNewDocumentWasCalled(Document*) { }
</del><ins>+    static void ensureDidMoveToNewDocumentWasCalled(Document&amp;) { }
</ins><span class="cx"> #else
</span><del>-    static void ensureDidMoveToNewDocumentWasCalled(Document*);
</del><ins>+    static void ensureDidMoveToNewDocumentWasCalled(Document&amp;);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void updateTreeScope(Node*) const;
-    void moveTreeToNewScope(Node*) const;
-    void moveShadowTreeToNewDocument(ShadowRoot*, Document* oldDocument, Document* newDocument) const;
-    void moveNodeToNewDocument(Node*, Document* oldDocument, Document* newDocument) const;
</del><ins>+    void updateTreeScope(Node&amp;) const;
+    void moveTreeToNewScope(Node&amp;) const;
+    void moveShadowTreeToNewDocument(ShadowRoot&amp;, Document&amp; oldDocument, Document&amp; newDocument) const;
+    void moveNodeToNewDocument(Node&amp;, Document&amp; oldDocument, Document&amp; newDocument) const;
</ins><span class="cx"> 
</span><del>-    Node* m_toAdopt;
</del><ins>+    Node&amp; m_toAdopt;
</ins><span class="cx">     TreeScope&amp; m_newScope;
</span><span class="cx">     TreeScope&amp; m_oldScope;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-inline TreeScopeAdopter::TreeScopeAdopter(Node* toAdopt, TreeScope&amp; newScope)
</del><ins>+inline TreeScopeAdopter::TreeScopeAdopter(Node&amp; toAdopt, TreeScope&amp; newScope)
</ins><span class="cx">     : m_toAdopt(toAdopt)
</span><span class="cx">     , m_newScope(newScope)
</span><del>-    , m_oldScope(toAdopt-&gt;treeScope())
</del><ins>+    , m_oldScope(toAdopt.treeScope())
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlFormAssociatedElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/FormAssociatedElement.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/FormAssociatedElement.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/FormAssociatedElement.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -60,10 +60,10 @@
</span><span class="cx">     setForm(nullptr);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void FormAssociatedElement::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void FormAssociatedElement::didMoveToNewDocument(Document&amp;)
</ins><span class="cx"> {
</span><span class="cx">     HTMLElement&amp; element = asHTMLElement();
</span><del>-    if (oldDocument &amp;&amp; element.hasAttributeWithoutSynchronization(formAttr))
</del><ins>+    if (element.hasAttributeWithoutSynchronization(formAttr))
</ins><span class="cx">         resetFormAttributeTargetObserver();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlFormAssociatedElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/FormAssociatedElement.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/FormAssociatedElement.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/FormAssociatedElement.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -92,7 +92,7 @@
</span><span class="cx"> 
</span><span class="cx">     void insertedInto(ContainerNode&amp;);
</span><span class="cx">     void removedFrom(ContainerNode&amp;);
</span><del>-    void didMoveToNewDocument(Document* oldDocument);
</del><ins>+    void didMoveToNewDocument(Document&amp; oldDocument);
</ins><span class="cx"> 
</span><span class="cx">     void setForm(HTMLFormElement*);
</span><span class="cx">     void formAttributeChanged();
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLFieldSetElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLFieldSetElement.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLFieldSetElement.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLFieldSetElement.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -122,12 +122,11 @@
</span><span class="cx">         updateFromControlElementsAncestorDisabledStateUnder(*legend, true);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLFieldSetElement::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void HTMLFieldSetElement::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><span class="cx">     HTMLFormControlElement::didMoveToNewDocument(oldDocument);
</span><span class="cx">     if (m_hasDisabledAttribute) {
</span><del>-        if (oldDocument)
-            oldDocument-&gt;removeDisabledFieldsetElement();
</del><ins>+        oldDocument.removeDisabledFieldsetElement();
</ins><span class="cx">         document().addDisabledFieldsetElement();
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLFieldSetElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLFieldSetElement.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLFieldSetElement.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLFieldSetElement.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -61,7 +61,7 @@
</span><span class="cx">     void disabledAttributeChanged() final;
</span><span class="cx">     void disabledStateChanged() final;
</span><span class="cx">     void childrenChanged(const ChildChange&amp;) final;
</span><del>-    void didMoveToNewDocument(Document* oldDocument) final;
</del><ins>+    void didMoveToNewDocument(Document&amp; oldDocument) final;
</ins><span class="cx"> 
</span><span class="cx">     bool matchesValidPseudoClass() const final;
</span><span class="cx">     bool matchesInvalidPseudoClass() const final;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLFormControlElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLFormControlElement.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLFormControlElement.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLFormControlElement.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -250,7 +250,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLFormControlElement::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void HTMLFormControlElement::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><span class="cx">     FormAssociatedElement::didMoveToNewDocument(oldDocument);
</span><span class="cx">     HTMLElement::didMoveToNewDocument(oldDocument);
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLFormControlElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLFormControlElement.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLFormControlElement.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLFormControlElement.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -138,7 +138,7 @@
</span><span class="cx">     InsertionNotificationRequest insertedInto(ContainerNode&amp;) override;
</span><span class="cx">     void finishedInsertingSubtree() override;
</span><span class="cx">     void removedFrom(ContainerNode&amp;) override;
</span><del>-    void didMoveToNewDocument(Document* oldDocument) override;
</del><ins>+    void didMoveToNewDocument(Document&amp; oldDocument) override;
</ins><span class="cx"> 
</span><span class="cx">     bool supportsFocus() const override;
</span><span class="cx">     bool isKeyboardFocusable(KeyboardEvent&amp;) const override;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLFormElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLFormElement.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLFormElement.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLFormElement.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -843,11 +843,10 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLFormElement::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void HTMLFormElement::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><span class="cx">     if (!shouldAutocomplete()) {
</span><del>-        if (oldDocument)
-            oldDocument-&gt;unregisterForDocumentSuspensionCallbacks(this);
</del><ins>+        oldDocument.unregisterForDocumentSuspensionCallbacks(this);
</ins><span class="cx">         document().registerForDocumentSuspensionCallbacks(this);
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLFormElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLFormElement.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLFormElement.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLFormElement.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -145,7 +145,7 @@
</span><span class="cx"> 
</span><span class="cx">     void resumeFromDocumentSuspension() final;
</span><span class="cx"> 
</span><del>-    void didMoveToNewDocument(Document* oldDocument) final;
</del><ins>+    void didMoveToNewDocument(Document&amp; oldDocument) final;
</ins><span class="cx"> 
</span><span class="cx">     void copyNonAttributePropertiesFromElement(const Element&amp;) final;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLImageElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLImageElement.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLImageElement.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLImageElement.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -555,7 +555,7 @@
</span><span class="cx">     addSubresourceURL(urls, document().completeURL(attributeWithoutSynchronization(usemapAttr)));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLImageElement::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void HTMLImageElement::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><span class="cx">     m_imageLoader.elementDidMoveToNewDocument();
</span><span class="cx">     HTMLElement::didMoveToNewDocument(oldDocument);
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLImageElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLImageElement.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLImageElement.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLImageElement.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -97,7 +97,7 @@
</span><span class="cx"> protected:
</span><span class="cx">     HTMLImageElement(const QualifiedName&amp;, Document&amp;, HTMLFormElement* = 0);
</span><span class="cx"> 
</span><del>-    void didMoveToNewDocument(Document* oldDocument) override;
</del><ins>+    void didMoveToNewDocument(Document&amp; oldDocument) override;
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     void parseAttribute(const QualifiedName&amp;, const AtomicString&amp;) override;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLInputElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLInputElement.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLInputElement.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLInputElement.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -1531,23 +1531,21 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLInputElement::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void HTMLInputElement::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><span class="cx">     if (imageLoader())
</span><span class="cx">         imageLoader()-&gt;elementDidMoveToNewDocument();
</span><span class="cx"> 
</span><span class="cx">     bool needsSuspensionCallback = this-&gt;needsSuspensionCallback();
</span><del>-    if (oldDocument) {
-        // Always unregister for cache callbacks when leaving a document, even if we would otherwise like to be registered
-        if (needsSuspensionCallback)
-            oldDocument-&gt;unregisterForDocumentSuspensionCallbacks(this);
-        if (isRadioButton())
-            oldDocument-&gt;formController().radioButtonGroups().removeButton(this);
</del><ins>+    // Always unregister for cache callbacks when leaving a document, even if we would otherwise like to be registered
+    if (needsSuspensionCallback)
+        oldDocument.unregisterForDocumentSuspensionCallbacks(this);
+    if (isRadioButton())
+        oldDocument.formController().radioButtonGroups().removeButton(this);
</ins><span class="cx"> #if ENABLE(TOUCH_EVENTS)
</span><del>-        if (m_hasTouchEventHandler)
-            oldDocument-&gt;didRemoveEventTargetNode(*this);
</del><ins>+    if (m_hasTouchEventHandler)
+        oldDocument.didRemoveEventTargetNode(*this);
</ins><span class="cx"> #endif
</span><del>-    }
</del><span class="cx"> 
</span><span class="cx">     if (needsSuspensionCallback)
</span><span class="cx">         document().registerForDocumentSuspensionCallbacks(this);
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLInputElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLInputElement.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLInputElement.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLInputElement.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -337,7 +337,7 @@
</span><span class="cx">     InsertionNotificationRequest insertedInto(ContainerNode&amp;) final;
</span><span class="cx">     void finishedInsertingSubtree() final;
</span><span class="cx">     void removedFrom(ContainerNode&amp;) final;
</span><del>-    void didMoveToNewDocument(Document* oldDocument) final;
</del><ins>+    void didMoveToNewDocument(Document&amp; oldDocument) final;
</ins><span class="cx"> 
</span><span class="cx">     bool hasCustomFocusLogic() const final;
</span><span class="cx">     bool isKeyboardFocusable(KeyboardEvent&amp;) const final;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -664,16 +664,14 @@
</span><span class="cx">     removeElementFromDocumentMap(*this, document);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLMediaElement::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void HTMLMediaElement::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><span class="cx">     if (m_shouldDelayLoadEvent) {
</span><del>-        if (oldDocument)
-            oldDocument-&gt;decrementLoadEventDelayCount();
</del><ins>+        oldDocument.decrementLoadEventDelayCount();
</ins><span class="cx">         document().incrementLoadEventDelayCount();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (oldDocument)
-        unregisterWithDocument(*oldDocument);
</del><ins>+    unregisterWithDocument(oldDocument);
</ins><span class="cx"> 
</span><span class="cx">     registerWithDocument(document());
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -495,7 +495,7 @@
</span><span class="cx">     void willDetachRenderers() override;
</span><span class="cx">     void didDetachRenderers() override;
</span><span class="cx"> 
</span><del>-    void didMoveToNewDocument(Document* oldDocument) override;
</del><ins>+    void didMoveToNewDocument(Document&amp; oldDocument) override;
</ins><span class="cx"> 
</span><span class="cx">     enum DisplayMode { Unknown, None, Poster, PosterWaitingForVideo, Video };
</span><span class="cx">     DisplayMode displayMode() const { return m_displayMode; }
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLObjectElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLObjectElement.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLObjectElement.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLObjectElement.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -498,7 +498,7 @@
</span><span class="cx">         addSubresourceURL(urls, document().completeURL(useMap));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLObjectElement::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void HTMLObjectElement::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><span class="cx">     FormAssociatedElement::didMoveToNewDocument(oldDocument);
</span><span class="cx">     HTMLPlugInImageElement::didMoveToNewDocument(oldDocument);
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLObjectElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLObjectElement.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLObjectElement.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLObjectElement.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx">     void finishedInsertingSubtree() final;
</span><span class="cx">     void removedFrom(ContainerNode&amp;) final;
</span><span class="cx"> 
</span><del>-    void didMoveToNewDocument(Document* oldDocument) final;
</del><ins>+    void didMoveToNewDocument(Document&amp; oldDocument) final;
</ins><span class="cx"> 
</span><span class="cx">     void childrenChanged(const ChildChange&amp;) final;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLPictureElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLPictureElement.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLPictureElement.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLPictureElement.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -42,10 +42,9 @@
</span><span class="cx">     document().removeViewportDependentPicture(*this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLPictureElement::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void HTMLPictureElement::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><del>-    if (oldDocument)
-        oldDocument-&gt;removeViewportDependentPicture(*this);
</del><ins>+    oldDocument.removeViewportDependentPicture(*this);
</ins><span class="cx">     HTMLElement::didMoveToNewDocument(oldDocument);
</span><span class="cx">     sourcesChanged();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLPictureElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLPictureElement.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLPictureElement.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLPictureElement.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> private:
</span><span class="cx">     HTMLPictureElement(const QualifiedName&amp;, Document&amp;);
</span><span class="cx"> 
</span><del>-    void didMoveToNewDocument(Document* oldDocument) final;
</del><ins>+    void didMoveToNewDocument(Document&amp; oldDocument) final;
</ins><span class="cx"> 
</span><span class="cx">     WeakPtrFactory&lt;HTMLPictureElement&gt; m_weakFactory { this };
</span><span class="cx">     Vector&lt;MediaQueryResult&gt; m_viewportDependentMediaQueryResults;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLPlugInImageElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -309,10 +309,10 @@
</span><span class="cx">         invalidateStyleForSubtree();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLPlugInImageElement::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void HTMLPlugInImageElement::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><span class="cx">     if (m_needsDocumentActivationCallbacks) {
</span><del>-        oldDocument-&gt;unregisterForDocumentSuspensionCallbacks(this);
</del><ins>+        oldDocument.unregisterForDocumentSuspensionCallbacks(this);
</ins><span class="cx">         document().registerForDocumentSuspensionCallbacks(this);
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLPlugInImageElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLPlugInImageElement.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLPlugInImageElement.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLPlugInImageElement.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -92,7 +92,7 @@
</span><span class="cx"> protected:
</span><span class="cx">     HTMLPlugInImageElement(const QualifiedName&amp; tagName, Document&amp;, bool createdByParser);
</span><span class="cx"> 
</span><del>-    void didMoveToNewDocument(Document* oldDocument) override;
</del><ins>+    void didMoveToNewDocument(Document&amp; oldDocument) override;
</ins><span class="cx">     bool requestObject(const String&amp; url, const String&amp; mimeType, const Vector&lt;String&gt;&amp; paramNames, const Vector&lt;String&gt;&amp; paramValues) final;
</span><span class="cx"> 
</span><span class="cx">     bool isImageType();
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLTemplateElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLTemplateElement.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLTemplateElement.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLTemplateElement.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -82,12 +82,12 @@
</span><span class="cx">     return clone.releaseNonNull();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLTemplateElement::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void HTMLTemplateElement::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><span class="cx">     HTMLElement::didMoveToNewDocument(oldDocument);
</span><span class="cx">     if (!m_content)
</span><span class="cx">         return;
</span><del>-    document().ensureTemplateDocument().adoptIfNeeded(m_content.get());
</del><ins>+    document().ensureTemplateDocument().adoptIfNeeded(*m_content);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLTemplateElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLTemplateElement.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLTemplateElement.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLTemplateElement.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx">     HTMLTemplateElement(const QualifiedName&amp;, Document&amp;);
</span><span class="cx"> 
</span><span class="cx">     Ref&lt;Node&gt; cloneNodeInternal(Document&amp;, CloningOperation) final;
</span><del>-    void didMoveToNewDocument(Document* oldDocument) final;
</del><ins>+    void didMoveToNewDocument(Document&amp; oldDocument) final;
</ins><span class="cx"> 
</span><span class="cx">     mutable RefPtr&lt;TemplateContentDocumentFragment&gt; m_content;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLVideoElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLVideoElement.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLVideoElement.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLVideoElement.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -353,7 +353,7 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-void HTMLVideoElement::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void HTMLVideoElement::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><span class="cx">     if (m_imageLoader)
</span><span class="cx">         m_imageLoader-&gt;elementDidMoveToNewDocument();
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLVideoElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLVideoElement.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLVideoElement.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/HTMLVideoElement.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -107,7 +107,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool hasAvailableVideoFrame() const;
</span><span class="cx">     void updateDisplayState() final;
</span><del>-    void didMoveToNewDocument(Document* oldDocument) final;
</del><ins>+    void didMoveToNewDocument(Document&amp; oldDocument) final;
</ins><span class="cx">     void setDisplayMode(DisplayMode) final;
</span><span class="cx"> 
</span><span class="cx">     PlatformMediaSession::MediaType presentationType() const final { return PlatformMediaSession::Video; }
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlImageDocumentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/ImageDocument.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/ImageDocument.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/html/ImageDocument.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -101,7 +101,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     virtual ~ImageDocumentElement();
</span><del>-    void didMoveToNewDocument(Document* oldDocument) override;
</del><ins>+    void didMoveToNewDocument(Document&amp; oldDocument) override;
</ins><span class="cx"> 
</span><span class="cx">     ImageDocument* m_imageDocument;
</span><span class="cx"> };
</span><span class="lines">@@ -421,7 +421,7 @@
</span><span class="cx">         m_imageDocument-&gt;disconnectImageElement();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ImageDocumentElement::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void ImageDocumentElement::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><span class="cx">     if (m_imageDocument) {
</span><span class="cx">         m_imageDocument-&gt;disconnectImageElement();
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGImageElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGImageElement.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGImageElement.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/svg/SVGImageElement.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -212,7 +212,7 @@
</span><span class="cx">     addSubresourceURL(urls, document().completeURL(href()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGImageElement::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void SVGImageElement::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><span class="cx">     m_imageLoader.elementDidMoveToNewDocument();
</span><span class="cx">     SVGGraphicsElement::didMoveToNewDocument(oldDocument);
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGImageElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGImageElement.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGImageElement.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/svg/SVGImageElement.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx">     bool haveLoadedRequiredResources() final;
</span><span class="cx"> 
</span><span class="cx">     bool selfHasRelativeLengths() const final { return true; }
</span><del>-    void didMoveToNewDocument(Document* oldDocument) final;
</del><ins>+    void didMoveToNewDocument(Document&amp; oldDocument) final;
</ins><span class="cx"> 
</span><span class="cx">     BEGIN_DECLARE_ANIMATED_PROPERTIES(SVGImageElement)
</span><span class="cx">         DECLARE_ANIMATED_LENGTH(X, x)
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSVGElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSVGElement.cpp (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSVGElement.cpp        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/svg/SVGSVGElement.cpp        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -98,10 +98,9 @@
</span><span class="cx">     document().accessSVGExtensions().removeTimeContainer(this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGSVGElement::didMoveToNewDocument(Document* oldDocument)
</del><ins>+void SVGSVGElement::didMoveToNewDocument(Document&amp; oldDocument)
</ins><span class="cx"> {
</span><del>-    if (oldDocument)
-        oldDocument-&gt;unregisterForDocumentSuspensionCallbacks(this);
</del><ins>+    oldDocument.unregisterForDocumentSuspensionCallbacks(this);
</ins><span class="cx">     document().registerForDocumentSuspensionCallbacks(this);
</span><span class="cx">     SVGGraphicsElement::didMoveToNewDocument(oldDocument);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSVGElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSVGElement.h (208827 => 208828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSVGElement.h        2016-11-17 00:37:15 UTC (rev 208827)
+++ trunk/Source/WebCore/svg/SVGSVGElement.h        2016-11-17 00:39:55 UTC (rev 208828)
</span><span class="lines">@@ -138,7 +138,7 @@
</span><span class="cx">     virtual ~SVGSVGElement();
</span><span class="cx"> 
</span><span class="cx">     bool isValid() const override;
</span><del>-    void didMoveToNewDocument(Document* oldDocument) override;
</del><ins>+    void didMoveToNewDocument(Document&amp; oldDocument) override;
</ins><span class="cx">     void parseAttribute(const QualifiedName&amp;, const AtomicString&amp;) override;
</span><span class="cx">     bool rendererIsNeeded(const RenderStyle&amp;) override;
</span><span class="cx">     RenderPtr&lt;RenderElement&gt; createElementRenderer(RenderStyle&amp;&amp;, const RenderTreePosition&amp;) override;
</span></span></pre>
</div>
</div>

</body>
</html>