Rename Node::inDocument() to isConnected()
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 2 Feb 2017 21:29:15 +0000 (21:29 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 2 Feb 2017 21:29:15 +0000 (21:29 +0000)
https://bugs.webkit.org/show_bug.cgi?id=167743

Reviewed by Sam Weinig.

Rename Node::inDocument() to isConnected() to match the DOM specification more closely:
- https://dom.spec.whatwg.org/#connected
Source/WebKit/mac:

* DOM/DOMNode.mm:
(-[DOMNode isConnected]):
* WebView/WebFrame.mm:
(-[WebFrame selectNSRange:onElement:]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211591 268f45cc-cd09-0410-ab3c-d52691b4dbfc

93 files changed:
Source/WebCore/ChangeLog
Source/WebCore/accessibility/AXObjectCache.cpp
Source/WebCore/bindings/js/JSNodeCustom.cpp
Source/WebCore/dom/ContainerNode.cpp
Source/WebCore/dom/ContainerNodeAlgorithms.cpp
Source/WebCore/dom/CustomElementReactionQueue.cpp
Source/WebCore/dom/DataTransfer.cpp
Source/WebCore/dom/Document.cpp
Source/WebCore/dom/Element.cpp
Source/WebCore/dom/Element.h
Source/WebCore/dom/EventPath.cpp
Source/WebCore/dom/InlineStyleSheetOwner.cpp
Source/WebCore/dom/LiveNodeList.cpp
Source/WebCore/dom/LiveNodeList.h
Source/WebCore/dom/Node.cpp
Source/WebCore/dom/Node.h
Source/WebCore/dom/Node.idl
Source/WebCore/dom/Position.h
Source/WebCore/dom/ProcessingInstruction.cpp
Source/WebCore/dom/Range.cpp
Source/WebCore/dom/ScriptElement.cpp
Source/WebCore/dom/ScriptRunner.cpp
Source/WebCore/dom/SelectorQuery.cpp
Source/WebCore/dom/ShadowRoot.cpp
Source/WebCore/dom/TreeScopeAdopter.cpp
Source/WebCore/editing/ApplyBlockElementCommand.cpp
Source/WebCore/editing/ApplyStyleCommand.cpp
Source/WebCore/editing/CompositeEditCommand.cpp
Source/WebCore/editing/DeleteSelectionCommand.cpp
Source/WebCore/editing/Editor.cpp
Source/WebCore/editing/FrameSelection.cpp
Source/WebCore/editing/IndentOutdentCommand.cpp
Source/WebCore/editing/InsertLineBreakCommand.cpp
Source/WebCore/editing/InsertListCommand.cpp
Source/WebCore/editing/InsertTextCommand.cpp
Source/WebCore/editing/MoveSelectionCommand.cpp
Source/WebCore/editing/ReplaceNodeWithSpanCommand.cpp
Source/WebCore/editing/ReplaceSelectionCommand.cpp
Source/WebCore/html/FormAssociatedElement.cpp
Source/WebCore/html/HTMLBaseElement.cpp
Source/WebCore/html/HTMLBodyElement.cpp
Source/WebCore/html/HTMLCollection.h
Source/WebCore/html/HTMLElement.cpp
Source/WebCore/html/HTMLFormControlElement.cpp
Source/WebCore/html/HTMLFormControlElementWithState.cpp
Source/WebCore/html/HTMLFormElement.cpp
Source/WebCore/html/HTMLFrameElementBase.cpp
Source/WebCore/html/HTMLFrameOwnerElement.cpp
Source/WebCore/html/HTMLFrameSetElement.cpp
Source/WebCore/html/HTMLImageElement.cpp
Source/WebCore/html/HTMLImageLoader.cpp
Source/WebCore/html/HTMLInputElement.cpp
Source/WebCore/html/HTMLLabelElement.cpp
Source/WebCore/html/HTMLLinkElement.cpp
Source/WebCore/html/HTMLMapElement.cpp
Source/WebCore/html/HTMLMediaElement.cpp
Source/WebCore/html/HTMLMetaElement.cpp
Source/WebCore/html/HTMLObjectElement.cpp
Source/WebCore/html/HTMLPlugInImageElement.cpp
Source/WebCore/html/HTMLSelectElement.cpp
Source/WebCore/html/HTMLStyleElement.cpp
Source/WebCore/html/HTMLTextFormControlElement.cpp
Source/WebCore/html/HTMLTitleElement.cpp
Source/WebCore/html/canvas/CanvasStyle.cpp
Source/WebCore/page/DOMSelection.cpp
Source/WebCore/page/EventHandler.cpp
Source/WebCore/page/PointerLockController.cpp
Source/WebCore/rendering/HitTestResult.cpp
Source/WebCore/rendering/RenderTextControlMultiLine.cpp
Source/WebCore/replay/ReplayController.cpp
Source/WebCore/style/StyleScope.cpp
Source/WebCore/style/StyleTreeResolver.cpp
Source/WebCore/svg/SVGAnimateElementBase.cpp
Source/WebCore/svg/SVGElement.cpp
Source/WebCore/svg/SVGExternalResourcesRequired.cpp
Source/WebCore/svg/SVGFEImageElement.cpp
Source/WebCore/svg/SVGFontFaceElement.cpp
Source/WebCore/svg/SVGImageElement.cpp
Source/WebCore/svg/SVGMPathElement.cpp
Source/WebCore/svg/SVGSVGElement.cpp
Source/WebCore/svg/SVGScriptElement.cpp
Source/WebCore/svg/SVGStyleElement.cpp
Source/WebCore/svg/SVGTRefElement.cpp
Source/WebCore/svg/SVGTests.cpp
Source/WebCore/svg/SVGTextPathElement.cpp
Source/WebCore/svg/SVGTitleElement.cpp
Source/WebCore/svg/SVGUseElement.cpp
Source/WebCore/svg/animation/SVGSMILElement.cpp
Source/WebCore/xml/XPathNodeSet.cpp
Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp
Source/WebKit/mac/ChangeLog
Source/WebKit/mac/DOM/DOMNode.mm
Source/WebKit/mac/WebView/WebFrame.mm

index fff3e26..87b99f0 100644 (file)
@@ -1,3 +1,13 @@
+2017-02-02  Chris Dumez  <cdumez@apple.com>
+
+        Rename Node::inDocument() to isConnected()
+        https://bugs.webkit.org/show_bug.cgi?id=167743
+
+        Reviewed by Sam Weinig.
+
+        Rename Node::inDocument() to isConnected() to match the DOM specification more closely:
+        - https://dom.spec.whatwg.org/#connected
+
 2017-02-02  Antoine Quint  <graouts@apple.com>
 
         [Modern Media Controls] Provide a compact mode for when the controls are small
index 1978e3e..982f0e1 100644 (file)
@@ -2658,7 +2658,7 @@ void AXObjectCache::clearTextMarkerNodesInUse(Document* document)
     // Check each node to see if it's inside the document being deleted, of if it no longer belongs to a document.
     HashSet<Node*> nodesToDelete;
     for (const auto& node : m_textMarkerNodes) {
-        if (!node->inDocument() || &(node)->document() == document)
+        if (!node->isConnected() || &(node)->document() == document)
             nodesToDelete.add(node);
     }
     
index aa226ba..3254872 100644 (file)
@@ -74,7 +74,7 @@ using namespace HTMLNames;
 
 static inline bool isReachableFromDOM(Node* node, SlotVisitor& visitor)
 {
-    if (!node->inDocument()) {
+    if (!node->isConnected()) {
         if (is<Element>(*node)) {
             auto& element = downcast<Element>(*node);
 
index 68396e1..a5d79d3 100644 (file)
@@ -816,7 +816,7 @@ static void dispatchChildInsertionEvents(Node& child)
         c->dispatchScopedEvent(MutationEvent::create(eventNames().DOMNodeInsertedEvent, true, c->parentNode()));
 
     // dispatch the DOMNodeInsertedIntoDocument event to all descendants
-    if (c->inDocument() && document->hasListenerType(Document::DOMNODEINSERTEDINTODOCUMENT_LISTENER)) {
+    if (c->isConnected() && document->hasListenerType(Document::DOMNODEINSERTEDINTODOCUMENT_LISTENER)) {
         for (; c; c = NodeTraversal::next(*c, &child))
             c->dispatchScopedEvent(MutationEvent::create(eventNames().DOMNodeInsertedIntoDocumentEvent, false));
     }
@@ -842,7 +842,7 @@ static void dispatchChildRemovalEvents(Node& child)
         c->dispatchScopedEvent(MutationEvent::create(eventNames().DOMNodeRemovedEvent, true, c->parentNode()));
 
     // dispatch the DOMNodeRemovedFromDocument event to all descendants
-    if (c->inDocument() && document->hasListenerType(Document::DOMNODEREMOVEDFROMDOCUMENT_LISTENER)) {
+    if (c->isConnected() && document->hasListenerType(Document::DOMNODEREMOVEDFROMDOCUMENT_LISTENER)) {
         for (; c; c = NodeTraversal::next(*c, &child))
             c->dispatchScopedEvent(MutationEvent::create(eventNames().DOMNodeRemovedFromDocumentEvent, false));
     }
index 75369d6..514f986 100644 (file)
@@ -45,7 +45,7 @@ static void notifyDescendantInsertedIntoDocument(ContainerNode& insertionPoint,
         // If we have been removed from the document during this loop, then
         // we don't want to tell the rest of our children that they've been
         // inserted into the document because they haven't.
-        if (node.inDocument() && child->parentNode() == &node)
+        if (node.isConnected() && child->parentNode() == &node)
             notifyNodeInsertedIntoDocument(insertionPoint, *child, postInsertionNotificationTargets);
     }
 
@@ -53,7 +53,7 @@ static void notifyDescendantInsertedIntoDocument(ContainerNode& insertionPoint,
         return;
 
     if (RefPtr<ShadowRoot> root = downcast<Element>(node).shadowRoot()) {
-        if (node.inDocument() && root->host() == &node)
+        if (node.isConnected() && root->host() == &node)
             notifyNodeInsertedIntoDocument(insertionPoint, *root, postInsertionNotificationTargets);
     }
 }
@@ -71,7 +71,7 @@ static void notifyDescendantInsertedIntoTree(ContainerNode& insertionPoint, Cont
 
 void notifyNodeInsertedIntoDocument(ContainerNode& insertionPoint, Node& node, NodeVector& postInsertionNotificationTargets)
 {
-    ASSERT(insertionPoint.inDocument());
+    ASSERT(insertionPoint.isConnected());
     if (node.insertedInto(insertionPoint) == Node::InsertionShouldCallFinishedInsertingSubtree)
         postInsertionNotificationTargets.append(node);
     if (is<ContainerNode>(node))
@@ -81,7 +81,7 @@ void notifyNodeInsertedIntoDocument(ContainerNode& insertionPoint, Node& node, N
 void notifyNodeInsertedIntoTree(ContainerNode& insertionPoint, ContainerNode& node, NodeVector& postInsertionNotificationTargets)
 {
     NoEventDispatchAssertion assertNoEventDispatch;
-    ASSERT(!insertionPoint.inDocument());
+    ASSERT(!insertionPoint.isConnected());
 
     if (node.insertedInto(insertionPoint) == Node::InsertionShouldCallFinishedInsertingSubtree)
         postInsertionNotificationTargets.append(node);
@@ -97,7 +97,7 @@ void notifyChildNodeInserted(ContainerNode& insertionPoint, Node& node, NodeVect
     Ref<Document> protectDocument(node.document());
     Ref<Node> protectNode(node);
 
-    if (insertionPoint.inDocument())
+    if (insertionPoint.isConnected())
         notifyNodeInsertedIntoDocument(insertionPoint, node, postInsertionNotificationTargets);
     else if (is<ContainerNode>(node))
         notifyNodeInsertedIntoTree(insertionPoint, downcast<ContainerNode>(node), postInsertionNotificationTargets);
@@ -105,7 +105,7 @@ void notifyChildNodeInserted(ContainerNode& insertionPoint, Node& node, NodeVect
 
 void notifyNodeRemovedFromDocument(ContainerNode& insertionPoint, Node& node)
 {
-    ASSERT(insertionPoint.inDocument());
+    ASSERT(insertionPoint.isConnected());
     node.removedFrom(insertionPoint);
 
     if (!is<ContainerNode>(node))
@@ -115,7 +115,7 @@ void notifyNodeRemovedFromDocument(ContainerNode& insertionPoint, Node& node)
         // If we have been added to the document during this loop, then we
         // don't want to tell the rest of our children that they've been
         // removed from the document because they haven't.
-        if (!node.inDocument() && child->parentNode() == &node)
+        if (!node.isConnected() && child->parentNode() == &node)
             notifyNodeRemovedFromDocument(insertionPoint, *child.get());
     }
 
@@ -126,7 +126,7 @@ void notifyNodeRemovedFromDocument(ContainerNode& insertionPoint, Node& node)
         node.document().setCSSTarget(nullptr);
 
     if (RefPtr<ShadowRoot> root = downcast<Element>(node).shadowRoot()) {
-        if (!node.inDocument() && root->host() == &node)
+        if (!node.isConnected() && root->host() == &node)
             notifyNodeRemovedFromDocument(insertionPoint, *root.get());
     }
 }
@@ -134,7 +134,7 @@ void notifyNodeRemovedFromDocument(ContainerNode& insertionPoint, Node& node)
 void notifyNodeRemovedFromTree(ContainerNode& insertionPoint, ContainerNode& node)
 {
     NoEventDispatchAssertion assertNoEventDispatch;
-    ASSERT(!insertionPoint.inDocument());
+    ASSERT(!insertionPoint.isConnected());
 
     node.removedFrom(insertionPoint);
 
@@ -152,7 +152,7 @@ void notifyNodeRemovedFromTree(ContainerNode& insertionPoint, ContainerNode& nod
 
 void notifyChildNodeRemoved(ContainerNode& insertionPoint, Node& child)
 {
-    if (!child.inDocument()) {
+    if (!child.isConnected()) {
         if (is<ContainerNode>(child))
             notifyNodeRemovedFromTree(insertionPoint, downcast<ContainerNode>(child));
         return;
index a1d1a11..a7dab97 100644 (file)
@@ -121,7 +121,7 @@ void CustomElementReactionQueue::enqueueElementUpgrade(Element& element)
 
 void CustomElementReactionQueue::enqueueElementUpgradeIfDefined(Element& element)
 {
-    ASSERT(element.inDocument());
+    ASSERT(element.isConnected());
     ASSERT(element.isCustomElementUpgradeCandidate());
     auto* window = element.document().domWindow();
     if (!window)
@@ -178,7 +178,7 @@ void CustomElementReactionQueue::enqueueAttributeChangedCallbackIfNeeded(Element
 void CustomElementReactionQueue::enqueuePostUpgradeReactions(Element& element)
 {
     ASSERT(element.isCustomElementUpgradeCandidate());
-    if (!element.hasAttributes() && !element.inDocument())
+    if (!element.hasAttributes() && !element.isConnected())
         return;
 
     auto* queue = element.reactionQueue();
@@ -191,7 +191,7 @@ void CustomElementReactionQueue::enqueuePostUpgradeReactions(Element& element)
         }
     }
 
-    if (element.inDocument() && queue->m_interface->hasConnectedCallback())
+    if (element.isConnected() && queue->m_interface->hasConnectedCallback())
         queue->m_items.append({CustomElementReactionQueueItem::Type::Connected});
 }
 
index 9ecb351..af69fa0 100644 (file)
@@ -256,7 +256,7 @@ void DataTransfer::setDragImage(Element* element, int x, int y)
         return;
 
     CachedImage* image = nullptr;
-    if (is<HTMLImageElement>(element) && !element->inDocument())
+    if (is<HTMLImageElement>(element) && !element->isConnected())
         image = downcast<HTMLImageElement>(*element).cachedImage();
 
     m_dragLocation = IntPoint(x, y);
index 0ae70fe..b5b7e33 100644 (file)
@@ -5579,7 +5579,7 @@ void Document::requestFullScreenForElement(Element* element, FullScreenCheckType
         // node document:
 
         // The context object is not in a document.
-        if (!element->inDocument())
+        if (!element->isConnected())
             break;
 
         // The context object's node document, or an ancestor browsing context's document does not have
@@ -5738,7 +5738,7 @@ void Document::webkitExitFullscreen()
         //    If doc's fullscreen element stack is non-empty and the element now at the top is either
         //    not in a document or its node document is not doc, repeat this substep.
         newTop = currentDoc->webkitFullscreenElement();
-        if (newTop && (!newTop->inDocument() || &newTop->document() != currentDoc))
+        if (newTop && (!newTop->isConnected() || &newTop->document() != currentDoc))
             continue;
 
         // 2. Queue a task to fire an event named fullscreenchange with its bubbles attribute set to true
@@ -5937,7 +5937,7 @@ void Document::dispatchFullScreenChangeOrErrorEvent(Deque<RefPtr<Node>>& queue,
 
         // If the element was removed from our tree, also message the documentElement. Since we may
         // have a document hierarchy, check that node isn't in another document.
-        if (!node->inDocument())
+        if (!node->isConnected())
             queue.append(documentElement());
 
 #if ENABLE(VIDEO)
@@ -6961,7 +6961,7 @@ DOMSelection* Document::getSelection()
 
 void Document::didInsertInDocumentShadowRoot(ShadowRoot& shadowRoot)
 {
-    ASSERT(shadowRoot.inDocument());
+    ASSERT(shadowRoot.isConnected());
     ASSERT(!m_inDocumentShadowRoots.contains(&shadowRoot));
     m_inDocumentShadowRoots.add(&shadowRoot);
 }
index 85e0b26..9daf9be 100644 (file)
@@ -508,7 +508,7 @@ Vector<String> Element::getAttributeNames() const
 
 bool Element::isFocusable() const
 {
-    if (!inDocument() || !supportsFocus())
+    if (!isConnected() || !supportsFocus())
         return false;
 
     if (!renderer()) {
@@ -1510,7 +1510,7 @@ void Element::stripScriptingAttributes(Vector<Attribute>& attributeVector) const
 
 void Element::parserSetAttributes(const Vector<Attribute>& attributeVector)
 {
-    ASSERT(!inDocument());
+    ASSERT(!isConnected());
     ASSERT(!parentNode());
     ASSERT(!m_elementData);
 
@@ -1605,11 +1605,11 @@ RenderPtr<RenderElement> Element::createElementRenderer(RenderStyle&& style, con
 
 Node::InsertionNotificationRequest Element::insertedInto(ContainerNode& insertionPoint)
 {
-    bool wasInDocument = inDocument();
-    // need to do superclass processing first so inDocument() is true
+    bool wasInDocument = isConnected();
+    // need to do superclass processing first so isConnected() is true
     // by the time we reach updateId
     ContainerNode::insertedInto(insertionPoint);
-    ASSERT(!wasInDocument || inDocument());
+    ASSERT(!wasInDocument || isConnected());
 
 #if ENABLE(FULLSCREEN_API)
     if (containsFullScreenElement() && parentElement() && !parentElement()->containsFullScreenElement())
@@ -1628,7 +1628,7 @@ Node::InsertionNotificationRequest Element::insertedInto(ContainerNode& insertio
     // This element is new to the shadow tree (and its tree scope) only if the parent into which this element
     // or its ancestor is inserted belongs to the same tree scope as this element's.
     TreeScope* newScope = &insertionPoint.treeScope();
-    bool becomeConnected = !wasInDocument && inDocument();
+    bool becomeConnected = !wasInDocument && isConnected();
     HTMLDocument* newDocument = becomeConnected && is<HTMLDocument>(newScope->documentScope()) ? &downcast<HTMLDocument>(newScope->documentScope()) : nullptr;
     if (newScope != &treeScope())
         newScope = nullptr;
@@ -1679,7 +1679,7 @@ void Element::removedFrom(ContainerNode& insertionPoint)
 
     if (insertionPoint.isInTreeScope()) {
         TreeScope* oldScope = &insertionPoint.treeScope();
-        bool becomeDisconnected = inDocument();
+        bool becomeDisconnected = isConnected();
         HTMLDocument* oldDocument = becomeDisconnected && is<HTMLDocument>(oldScope->documentScope()) ? &downcast<HTMLDocument>(oldScope->documentScope()) : nullptr;
 
         // ContainerNode::removeBetween always sets the removed chid's tree scope to Document's but InTreeScope flag is unset in Node::removedFrom.
@@ -2343,7 +2343,7 @@ CSSStyleDeclaration* Element::cssomStyle()
 
 void Element::focus(bool restorePreviousSelection, FocusDirection direction)
 {
-    if (!inDocument())
+    if (!isConnected())
         return;
 
     if (document().focusedElement() == this) {
@@ -2646,7 +2646,7 @@ const RenderStyle* Element::existingComputedStyle()
 
 const RenderStyle& Element::resolveComputedStyle()
 {
-    ASSERT(inDocument());
+    ASSERT(isConnected());
     ASSERT(!existingComputedStyle());
 
     Deque<Element*, 32> elementsRequiringComputedStyle({ this });
@@ -2675,7 +2675,7 @@ const RenderStyle& Element::resolveComputedStyle()
 
 const RenderStyle* Element::computedStyle(PseudoId pseudoElementSpecifier)
 {
-    if (!inDocument())
+    if (!isConnected())
         return nullptr;
 
     if (PseudoElement* pseudoElement = beforeOrAfterPseudoElement(*this, pseudoElementSpecifier))
@@ -3202,7 +3202,7 @@ inline void Element::updateName(const AtomicString& oldName, const AtomicString&
 
     updateNameForTreeScope(treeScope(), oldName, newName);
 
-    if (!inDocument())
+    if (!isConnected())
         return;
     if (!is<HTMLDocument>(document()))
         return;
@@ -3253,7 +3253,7 @@ inline void Element::updateId(const AtomicString& oldId, const AtomicString& new
 
     updateIdForTreeScope(treeScope(), oldId, newId, notifyObservers);
 
-    if (!inDocument())
+    if (!isConnected())
         return;
     if (!is<HTMLDocument>(document()))
         return;
@@ -3273,7 +3273,7 @@ void Element::updateIdForTreeScope(TreeScope& scope, const AtomicString& oldId,
 
 void Element::updateIdForDocument(HTMLDocument& document, const AtomicString& oldId, const AtomicString& newId, HTMLDocumentNamedItemMapsUpdatingCondition condition)
 {
-    ASSERT(inDocument());
+    ASSERT(isConnected());
     ASSERT(oldId != newId);
 
     if (isInShadowTree())
@@ -3300,7 +3300,7 @@ void Element::updateLabel(TreeScope& scope, const AtomicString& oldForAttributeV
 {
     ASSERT(hasTagName(labelTag));
 
-    if (!inDocument())
+    if (!isConnected())
         return;
 
     if (oldForAttributeValue == newForAttributeValue)
@@ -3510,7 +3510,7 @@ void Element::cloneAttributesFromElement(const Element& other)
 
     // We can't update window and document's named item maps since the presence of image and object elements depend on other attributes and children.
     // Fortunately, those named item maps are only updated when this element is in the document, which should never be the case.
-    ASSERT(!inDocument());
+    ASSERT(!isConnected());
 
     const AtomicString& oldID = getIdAttribute();
     const AtomicString& newID = other.getIdAttribute();
index 953416b..79c0aa0 100644 (file)
@@ -701,7 +701,7 @@ inline Element* Node::parentElement() const
 
 inline const Element* Element::rootElement() const
 {
-    if (inDocument())
+    if (isConnected())
         return document().documentElement();
 
     const Element* highest = this;
index 7771281..3161eaa 100644 (file)
@@ -290,7 +290,7 @@ RelatedNodeRetargeter::RelatedNodeRetargeter(Node& relatedNode, Node& target)
 {
     auto& targetTreeScope = target.treeScope();
     TreeScope* currentTreeScope = &m_relatedNode.treeScope();
-    if (LIKELY(currentTreeScope == &targetTreeScope && target.inDocument() && m_relatedNode.inDocument()))
+    if (LIKELY(currentTreeScope == &targetTreeScope && target.isConnected() && m_relatedNode.isConnected()))
         return;
 
     if (&currentTreeScope->documentScope() != &targetTreeScope.documentScope()) {
@@ -298,7 +298,7 @@ RelatedNodeRetargeter::RelatedNodeRetargeter(Node& relatedNode, Node& target)
         m_retargetedRelatedNode = nullptr;
         return;
     }
-    if (relatedNode.inDocument() != target.inDocument()) {
+    if (relatedNode.isConnected() != target.isConnected()) {
         m_hasDifferentTreeRoot = true;
         m_retargetedRelatedNode = moveOutOfAllShadowRoots(relatedNode);
         return;
@@ -323,7 +323,7 @@ RelatedNodeRetargeter::RelatedNodeRetargeter(Node& relatedNode, Node& target)
     }
 
     bool lowestCommonAncestorIsDocumentScope = i + 1 == m_ancestorTreeScopes.size();
-    if (lowestCommonAncestorIsDocumentScope && !relatedNode.inDocument() && !target.inDocument()) {
+    if (lowestCommonAncestorIsDocumentScope && !relatedNode.isConnected() && !target.isConnected()) {
         Node& relatedNodeAncestorInDocumentScope = i ? *downcast<ShadowRoot>(m_ancestorTreeScopes[i - 1]->rootNode()).shadowHost() : relatedNode;
         Node& targetAncestorInDocumentScope = j ? *downcast<ShadowRoot>(targetTreeScopeAncestors[j - 1]->rootNode()).shadowHost() : target;
         if (&targetAncestorInDocumentScope.rootNode() != &relatedNodeAncestorInDocumentScope.rootNode()) {
index da68fb1..a252632 100644 (file)
@@ -116,14 +116,14 @@ void InlineStyleSheetOwner::childrenChanged(Element& element)
 {
     if (m_isParsingChildren)
         return;
-    if (!element.inDocument())
+    if (!element.isConnected())
         return;
     createSheetFromTextContents(element);
 }
 
 void InlineStyleSheetOwner::finishParsingChildren(Element& element)
 {
-    if (element.inDocument())
+    if (element.isConnected())
         createSheetFromTextContents(element);
     m_isParsingChildren = false;
 }
@@ -153,7 +153,7 @@ inline bool isValidCSSContentType(Element& element, const AtomicString& type)
 
 void InlineStyleSheetOwner::createSheet(Element& element, const String& text)
 {
-    ASSERT(element.inDocument());
+    ASSERT(element.isConnected());
     Document& document = element.document();
     if (m_sheet) {
         if (m_sheet->isLoading() && m_styleScope)
index 0135eac..169d6de 100644 (file)
@@ -44,7 +44,7 @@ LiveNodeList::~LiveNodeList()
 
 ContainerNode& LiveNodeList::rootNode() const
 {
-    if (isRootedAtDocument() && ownerNode().inDocument())
+    if (isRootedAtDocument() && ownerNode().isConnected())
         return ownerNode().document();
 
     return ownerNode();
index dee646c..5b1b16d 100644 (file)
@@ -145,7 +145,7 @@ CachedLiveNodeList<NodeListType>::~CachedLiveNodeList()
 template <class NodeListType>
 inline ContainerNode& CachedLiveNodeList<NodeListType>::rootNode() const
 {
-    if (nodeList().isRootedAtDocument() && ownerNode().inDocument())
+    if (nodeList().isRootedAtDocument() && ownerNode().isConnected())
         return ownerNode().document();
 
     return ownerNode();
index e913fd7..a6a8efa 100644 (file)
@@ -911,10 +911,10 @@ ExceptionOr<void> Node::checkSetPrefix(const AtomicString& prefix)
 bool Node::isDescendantOf(const Node& other) const
 {
     // Return true if other is an ancestor of this, otherwise false
-    if (!other.hasChildNodes() || inDocument() != other.inDocument())
+    if (!other.hasChildNodes() || isConnected() != other.isConnected())
         return false;
     if (other.isDocumentNode())
-        return &document() == &other && !isDocumentNode() && inDocument();
+        return &document() == &other && !isDocumentNode() && isConnected();
     for (const auto* ancestor = parentNode(); ancestor; ancestor = ancestor->parentNode()) {
         if (ancestor == &other)
             return true;
@@ -1220,9 +1220,9 @@ Node& Node::getRootNode(const GetRootNodeOptions& options) const
 
 Node::InsertionNotificationRequest Node::insertedInto(ContainerNode& insertionPoint)
 {
-    ASSERT(insertionPoint.inDocument() || isContainerNode());
-    if (insertionPoint.inDocument())
-        setFlag(InDocumentFlag);
+    ASSERT(insertionPoint.isConnected() || isContainerNode());
+    if (insertionPoint.isConnected())
+        setFlag(IsConnectedFlag);
     if (parentOrShadowHostNode()->isInShadowTree())
         setFlag(IsInShadowTreeFlag);
 
@@ -1233,9 +1233,9 @@ Node::InsertionNotificationRequest Node::insertedInto(ContainerNode& insertionPo
 
 void Node::removedFrom(ContainerNode& insertionPoint)
 {
-    ASSERT(insertionPoint.inDocument() || isContainerNode());
-    if (insertionPoint.inDocument())
-        clearFlag(InDocumentFlag);
+    ASSERT(insertionPoint.isConnected() || isContainerNode());
+    if (insertionPoint.isConnected())
+        clearFlag(IsConnectedFlag);
     if (isInShadowTree() && !treeScope().rootNode().isShadowRoot())
         clearFlag(IsInShadowTreeFlag);
 }
@@ -1598,8 +1598,8 @@ unsigned short Node::compareDocumentPosition(Node& otherNode)
 
     // If one node is in the document and the other is not, we must be disconnected.
     // If the nodes have different owning documents, they must be disconnected.  Note that we avoid
-    // comparing Attr nodes here, since they return false from inDocument() all the time (which seems like a bug).
-    if (start1->inDocument() != start2->inDocument() || &start1->treeScope() != &start2->treeScope())
+    // comparing Attr nodes here, since they return false from isConnected() all the time (which seems like a bug).
+    if (start1->isConnected() != start2->isConnected() || &start1->treeScope() != &start2->treeScope())
         return compareDetachedElementsPosition(*this, otherNode);
 
     // We need to find a common ancestor container, and then compare the indices of the two immediate children.
@@ -2397,7 +2397,7 @@ void Node::updateAncestorConnectedSubframeCountForInsertion() const
 
 bool Node::inRenderedDocument() const
 {
-    return inDocument() && document().hasLivingRenderTree();
+    return isConnected() && document().hasLivingRenderTree();
 }
 
 void* Node::opaqueRootSlow() const
index ccc1d0a..37a7f5d 100644 (file)
@@ -372,14 +372,14 @@ public:
     static ptrdiff_t treeScopeMemoryOffset() { return OBJECT_OFFSETOF(Node, m_treeScope); }
 
     // Returns true if this node is associated with a document and is in its associated document's
-    // node tree, false otherwise.
-    bool inDocument() const 
+    // node tree, false otherwise (https://dom.spec.whatwg.org/#connected).
+    bool isConnected() const
     { 
-        return getFlag(InDocumentFlag);
+        return getFlag(IsConnectedFlag);
     }
     bool isInUserAgentShadowTree() const;
     bool isInShadowTree() const { return getFlag(IsInShadowTreeFlag); }
-    bool isInTreeScope() const { return getFlag(static_cast<NodeFlags>(InDocumentFlag | IsInShadowTreeFlag)); }
+    bool isInTreeScope() const { return getFlag(static_cast<NodeFlags>(IsConnectedFlag | IsInShadowTreeFlag)); }
 
     bool isDocumentTypeNode() const { return nodeType() == DOCUMENT_TYPE_NODE; }
     virtual bool childTypeAllowed(NodeType) const { return false; }
@@ -442,7 +442,7 @@ public:
     // dispatching.
     //
     // WebKit notifies this callback regardless if the subtree of the node is a document tree or a floating subtree.
-    // Implementation can determine the type of subtree by seeing insertionPoint->inDocument().
+    // Implementation can determine the type of subtree by seeing insertionPoint->isConnected().
     // For a performance reason, notifications are delivered only to ContainerNode subclasses if the insertionPoint is out of document.
     //
     // There is another callback named finishedInsertingSubtree(), which is called after all descendants are notified.
@@ -573,7 +573,7 @@ protected:
         IsHTMLFlag = 1 << 4,
         IsSVGFlag = 1 << 5,
         ChildNeedsStyleRecalcFlag = 1 << 7,
-        InDocumentFlag = 1 << 8,
+        IsConnectedFlag = 1 << 8,
         IsLinkFlag = 1 << 9,
         IsUserActionElement = 1 << 10,
         HasRareDataFlag = 1 << 11,
@@ -617,13 +617,13 @@ protected:
         CreateText = DefaultNodeFlags | IsTextFlag,
         CreateContainer = DefaultNodeFlags | IsContainerFlag, 
         CreateElement = CreateContainer | IsElementFlag, 
-        CreatePseudoElement =  CreateElement | InDocumentFlag,
+        CreatePseudoElement =  CreateElement | IsConnectedFlag,
         CreateShadowRoot = CreateContainer | IsDocumentFragmentFlag | IsInShadowTreeFlag,
         CreateDocumentFragment = CreateContainer | IsDocumentFragmentFlag,
         CreateStyledElement = CreateElement | IsStyledElementFlag, 
         CreateHTMLElement = CreateStyledElement | IsHTMLFlag,
         CreateSVGElement = CreateStyledElement | IsSVGFlag | HasCustomStyleResolveCallbacksFlag,
-        CreateDocument = CreateContainer | InDocumentFlag,
+        CreateDocument = CreateContainer | IsConnectedFlag,
         CreateEditingText = CreateText | IsEditingTextOrUndefinedCustomElementFlag,
         CreateMathMLElement = CreateStyledElement | IsMathMLFlag
     };
@@ -761,7 +761,7 @@ inline void* Node::opaqueRoot() const
 {
     // FIXME: Possible race?
     // https://bugs.webkit.org/show_bug.cgi?id=165713
-    if (inDocument())
+    if (isConnected())
         return &document();
     return opaqueRootSlow();
 }
index 784a9ef..d738f2a 100644 (file)
@@ -88,7 +88,7 @@
     boolean contains(Node? other);
 
     [EnabledAtRuntime=ShadowDOM] Node getRootNode(optional GetRootNodeOptions options);
-    [EnabledAtRuntime=ShadowDOM, ImplementedAs=inDocument] readonly attribute boolean isConnected;
+    [EnabledAtRuntime=ShadowDOM] readonly attribute boolean isConnected;
 
     readonly attribute Element parentElement;
 };
index 86323fe..f7c42bb 100644 (file)
@@ -126,7 +126,7 @@ public:
 
     bool isNull() const { return !m_anchorNode; }
     bool isNotNull() const { return m_anchorNode; }
-    bool isOrphan() const { return m_anchorNode && !m_anchorNode->inDocument(); }
+    bool isOrphan() const { return m_anchorNode && !m_anchorNode->isConnected(); }
 
     Element* element() const;
 
index 9ad9e7b..92c3322 100644 (file)
@@ -57,7 +57,7 @@ ProcessingInstruction::~ProcessingInstruction()
     if (m_cachedSheet)
         m_cachedSheet->removeClient(*this);
 
-    if (inDocument())
+    if (isConnected())
         document().styleScope().removeStyleSheetCandidateNode(*this);
 }
 
@@ -188,7 +188,7 @@ bool ProcessingInstruction::sheetLoaded()
 
 void ProcessingInstruction::setCSSStyleSheet(const String& href, const URL& baseURL, const String& charset, const CachedCSSStyleSheet* sheet)
 {
-    if (!inDocument()) {
+    if (!isConnected()) {
         ASSERT(!m_sheet);
         return;
     }
@@ -253,7 +253,7 @@ void ProcessingInstruction::addSubresourceAttributeURLs(ListHashSet<URL>& urls)
 Node::InsertionNotificationRequest ProcessingInstruction::insertedInto(ContainerNode& insertionPoint)
 {
     CharacterData::insertedInto(insertionPoint);
-    if (!insertionPoint.inDocument())
+    if (!insertionPoint.isConnected())
         return InsertionDone;
     document().styleScope().addStyleSheetCandidateNode(*this, m_createdByParser);
     checkStyleSheet();
@@ -263,7 +263,7 @@ Node::InsertionNotificationRequest ProcessingInstruction::insertedInto(Container
 void ProcessingInstruction::removedFrom(ContainerNode& insertionPoint)
 {
     CharacterData::removedFrom(insertionPoint);
-    if (!insertionPoint.inDocument())
+    if (!insertionPoint.isConnected())
         return;
     
     document().styleScope().removeStyleSheetCandidateNode(*this);
index 7337d42..e46266a 100644 (file)
@@ -263,7 +263,7 @@ ExceptionOr<short> Range::comparePoint(Node& refNode, unsigned offset) const
     if (checkNodeResult.hasException()) {
         // DOM4 spec requires us to check whether refNode and start container have the same root first
         // but we do it in the reverse order to avoid O(n) operation here in common case.
-        if (!refNode.inDocument() && !commonAncestorContainer(&refNode, &startContainer()))
+        if (!refNode.isConnected() && !commonAncestorContainer(&refNode, &startContainer()))
             return Exception { WRONG_DOCUMENT_ERR };
         return checkNodeResult.releaseException();
     }
@@ -292,7 +292,7 @@ ExceptionOr<Range::CompareResults> Range::compareNode(Node& refNode) const
     // This method returns 0, 1, 2, or 3 based on if the node is before, after,
     // before and after(surrounds), or inside the range, respectively
 
-    if (!refNode.inDocument()) {
+    if (!refNode.isConnected()) {
         // Firefox doesn't throw an exception for this case; it returns 0.
         return NODE_BEFORE;
     }
@@ -473,7 +473,7 @@ ExceptionOr<void> Range::deleteContents()
 
 ExceptionOr<bool> Range::intersectsNode(Node& refNode) const
 {
-    if (!refNode.inDocument() || &refNode.document() != &ownerDocument())
+    if (!refNode.isConnected() || &refNode.document() != &ownerDocument())
         return false;
 
     ContainerNode* parentNode = refNode.parentNode();
index 0bda3b9..d018c5d 100644 (file)
@@ -74,7 +74,7 @@ ScriptElement::ScriptElement(Element& element, bool parserInserted, bool already
 
 bool ScriptElement::shouldCallFinishedInsertingSubtree(ContainerNode& insertionPoint)
 {
-    return insertionPoint.inDocument() && !m_parserInserted;
+    return insertionPoint.isConnected() && !m_parserInserted;
 }
 
 void ScriptElement::finishedInsertingSubtree()
@@ -85,7 +85,7 @@ void ScriptElement::finishedInsertingSubtree()
 
 void ScriptElement::childrenChanged()
 {
-    if (!m_parserInserted && m_element.inDocument())
+    if (!m_parserInserted && m_element.isConnected())
         prepareScript(); // FIXME: Provide a real starting line number here.
 }
 
@@ -193,7 +193,7 @@ bool ScriptElement::prepareScript(const TextPosition& scriptStartPosition, Legac
     if (!hasSourceAttribute() && !m_element.firstChild())
         return false;
 
-    if (!m_element.inDocument())
+    if (!m_element.isConnected())
         return false;
 
     ScriptType scriptType = ScriptType::Classic;
@@ -285,7 +285,7 @@ bool ScriptElement::requestClassicScript(const String& sourceURL)
     Ref<Document> originalDocument(m_element.document());
     if (!m_element.dispatchBeforeLoadEvent(sourceURL))
         return false;
-    bool didEventListenerDisconnectThisElement = !m_element.inDocument() || &m_element.document() != originalDocument.ptr();
+    bool didEventListenerDisconnectThisElement = !m_element.isConnected() || &m_element.document() != originalDocument.ptr();
     if (didEventListenerDisconnectThisElement)
         return false;
 
@@ -325,7 +325,7 @@ bool ScriptElement::requestModuleScript(const TextPosition& scriptStartPosition)
         if (!m_element.dispatchBeforeLoadEvent(sourceURL))
             return false;
 
-        bool didEventListenerDisconnectThisElement = !m_element.inDocument() || &m_element.document() != originalDocument.ptr();
+        bool didEventListenerDisconnectThisElement = !m_element.isConnected() || &m_element.document() != originalDocument.ptr();
         if (didEventListenerDisconnectThisElement)
             return false;
 
@@ -433,7 +433,7 @@ void ScriptElement::executePendingScript(PendingScript& pendingScript)
 
 bool ScriptElement::ignoresLoadRequest() const
 {
-    return m_alreadyStarted || m_isExternalScript || m_parserInserted || !m_element.inDocument();
+    return m_alreadyStarted || m_isExternalScript || m_parserInserted || !m_element.isConnected();
 }
 
 bool ScriptElement::isScriptForEventSupported() const
index 1d52e58..0c666aa 100644 (file)
@@ -59,7 +59,7 @@ ScriptRunner::~ScriptRunner()
 
 void ScriptRunner::queueScriptForExecution(ScriptElement& scriptElement, LoadableScript& loadableScript, ExecutionType executionType)
 {
-    ASSERT(scriptElement.element().inDocument());
+    ASSERT(scriptElement.element().isConnected());
 
     m_document.incrementLoadEventDelayCount();
 
index 48a97c6..f49bc30 100644 (file)
@@ -196,7 +196,7 @@ Element* SelectorDataList::queryFirst(ContainerNode& rootNode) const
 
 static const CSSSelector* selectorForIdLookup(const ContainerNode& rootNode, const CSSSelector& firstSelector)
 {
-    if (!rootNode.inDocument())
+    if (!rootNode.isConnected())
         return nullptr;
     if (rootNode.document().inQuirksMode())
         return nullptr;
@@ -246,7 +246,7 @@ ALWAYS_INLINE void SelectorDataList::executeFastPathForIdSelector(const Containe
 
 static ContainerNode& filterRootById(ContainerNode& rootNode, const CSSSelector& firstSelector)
 {
-    if (!rootNode.inDocument())
+    if (!rootNode.isConnected())
         return rootNode;
     if (rootNode.document().inQuirksMode())
         return rootNode;
index 05d21c2..f54fd74 100644 (file)
@@ -71,7 +71,7 @@ ShadowRoot::ShadowRoot(Document& document, std::unique_ptr<SlotAssignment>&& slo
 
 ShadowRoot::~ShadowRoot()
 {
-    if (inDocument())
+    if (isConnected())
         document().didRemoveInDocumentShadowRoot(*this);
 
     // We cannot let ContainerNode destructor call willBeDeletedFrom()
@@ -88,9 +88,9 @@ ShadowRoot::~ShadowRoot()
 
 Node::InsertionNotificationRequest ShadowRoot::insertedInto(ContainerNode& insertionPoint)
 {
-    bool wasInDocument = inDocument();
+    bool wasInDocument = isConnected();
     DocumentFragment::insertedInto(insertionPoint);
-    if (insertionPoint.inDocument() && !wasInDocument)
+    if (insertionPoint.isConnected() && !wasInDocument)
         document().didInsertInDocumentShadowRoot(*this);
     return InsertionDone;
 }
@@ -98,7 +98,7 @@ Node::InsertionNotificationRequest ShadowRoot::insertedInto(ContainerNode& inser
 void ShadowRoot::removedFrom(ContainerNode& insertionPoint)
 {
     DocumentFragment::removedFrom(insertionPoint);
-    if (insertionPoint.inDocument() && !inDocument())
+    if (insertionPoint.isConnected() && !isConnected())
         document().didRemoveInDocumentShadowRoot(*this);
 }
 
index 8307aac..751d2a8 100644 (file)
@@ -109,7 +109,7 @@ inline void TreeScopeAdopter::updateTreeScope(Node& node) const
 
 inline void TreeScopeAdopter::moveNodeToNewDocument(Node& node, Document& oldDocument, Document& newDocument) const
 {
-    ASSERT(!node.inDocument() || &oldDocument != &newDocument);
+    ASSERT(!node.isConnected() || &oldDocument != &newDocument);
 
     newDocument.incrementReferencingNodeCount();
     oldDocument.decrementReferencingNodeCount();
index 1b49a83..6731880 100644 (file)
@@ -157,11 +157,11 @@ void ApplyBlockElementCommand::formatSelection(const VisiblePosition& startOfSel
         // indentIntoBlockquote could move more than one paragraph if the paragraph
         // is in a list item or a table. As a result, endAfterSelection could refer to a position
         // no longer in the document.
-        if (endAfterSelection.isNotNull() && !endAfterSelection.deepEquivalent().anchorNode()->inDocument())
+        if (endAfterSelection.isNotNull() && !endAfterSelection.deepEquivalent().anchorNode()->isConnected())
             break;
         // Sanity check: Make sure our moveParagraph calls didn't remove endOfNextParagraph.deepEquivalent().deprecatedNode()
         // If somehow we did, return to prevent crashes.
-        if (endOfNextParagraph.isNotNull() && !endOfNextParagraph.deepEquivalent().anchorNode()->inDocument()) {
+        if (endOfNextParagraph.isNotNull() && !endOfNextParagraph.deepEquivalent().anchorNode()->isConnected()) {
             ASSERT_NOT_REACHED();
             return;
         }
index ea0c315..efc1f88 100644 (file)
@@ -755,7 +755,7 @@ struct InlineRunToApplyStyle {
 
     bool startAndEndAreStillInDocument()
     {
-        return start && end && start->inDocument() && end->inDocument();
+        return start && end && start->isConnected() && end->isConnected();
     }
 
     RefPtr<Node> start;
@@ -870,7 +870,7 @@ void ApplyStyleCommand::removeConflictingInlineStyleFromRun(EditingStyle* style,
 {
     ASSERT(runStart && runEnd);
     RefPtr<Node> next = runStart;
-    for (RefPtr<Node> node = next; node && node->inDocument() && node != pastEndNode; node = next) {
+    for (RefPtr<Node> node = next; node && node->isConnected() && node != pastEndNode; node = next) {
         if (editingIgnoresContent(*node)) {
             ASSERT(!node->contains(pastEndNode.get()));
             next = NodeTraversal::nextSkippingChildren(*node);
@@ -884,7 +884,7 @@ void ApplyStyleCommand::removeConflictingInlineStyleFromRun(EditingStyle* style,
         RefPtr<Node> nextSibling = node->nextSibling();
         RefPtr<ContainerNode> parent = node->parentNode();
         removeInlineStyleFromElement(style, downcast<HTMLElement>(node.get()), RemoveAlways);
-        if (!node->inDocument()) {
+        if (!node->isConnected()) {
             // FIXME: We might need to update the start and the end of current selection here but need a test.
             if (runStart == node)
                 runStart = previousSibling ? previousSibling->nextSibling() : parent->firstChild();
@@ -914,7 +914,7 @@ bool ApplyStyleCommand::removeInlineStyleFromElement(EditingStyle* style, PassRe
     if (removeImplicitlyStyledElement(style, element.get(), mode, extractedStyle))
         removed = true;
 
-    if (!element->inDocument())
+    if (!element->isConnected())
         return removed;
 
     // If the node was converted to a span, the span may still contain relevant
@@ -931,7 +931,7 @@ void ApplyStyleCommand::replaceWithSpanOrRemoveIfWithoutAttributes(HTMLElement*&
         removeNodePreservingChildren(elem);
     else {
         HTMLElement* newSpanElement = replaceElementWithSpanPreservingChildrenAndAttributes(elem);
-        ASSERT(newSpanElement && newSpanElement->inDocument());
+        ASSERT(newSpanElement && newSpanElement->isConnected());
         elem = newSpanElement;
     }
 }
@@ -1097,8 +1097,8 @@ void ApplyStyleCommand::removeInlineStyle(EditingStyle* style, const Position& s
 {
     ASSERT(start.isNotNull());
     ASSERT(end.isNotNull());
-    ASSERT(start.anchorNode()->inDocument());
-    ASSERT(end.anchorNode()->inDocument());
+    ASSERT(start.anchorNode()->isConnected());
+    ASSERT(end.anchorNode()->isConnected());
     ASSERT(comparePositions(start, end) <= 0);
     // FIXME: We should assert that start/end are not in the middle of a text node.
 
@@ -1148,7 +1148,7 @@ void ApplyStyleCommand::removeInlineStyle(EditingStyle* style, const Position& s
             }
 
             removeInlineStyleFromElement(style, element.ptr(), RemoveIfNeeded, styleToPushDown.get());
-            if (!element->inDocument()) {
+            if (!element->isConnected()) {
                 if (s.deprecatedNode() == element.ptr()) {
                     // Since elem must have been fully selected, and it is at the start
                     // of the selection, it is clear we can set the new s offset to 0.
@@ -1401,7 +1401,7 @@ void ApplyStyleCommand::addBlockStyle(const StyleChange& styleChange, HTMLElemen
 
 void ApplyStyleCommand::addInlineStyleIfNeeded(EditingStyle* style, PassRefPtr<Node> passedStart, PassRefPtr<Node> passedEnd, EAddStyledElement addStyledElement)
 {
-    if (!passedStart || !passedEnd || !passedStart->inDocument() || !passedEnd->inDocument())
+    if (!passedStart || !passedEnd || !passedStart->isConnected() || !passedEnd->isConnected())
         return;
 
     RefPtr<Node> start = passedStart;
@@ -1430,8 +1430,8 @@ void ApplyStyleCommand::applyInlineStyleChange(PassRefPtr<Node> passedStart, Pas
 {
     RefPtr<Node> startNode = passedStart;
     RefPtr<Node> endNode = passedEnd;
-    ASSERT(startNode->inDocument());
-    ASSERT(endNode->inDocument());
+    ASSERT(startNode->isConnected());
+    ASSERT(endNode->isConnected());
 
     // Find appropriate font and span elements top-down.
     HTMLFontElement* fontContainer = nullptr;
index f7fd484..61ddbf5 100644 (file)
@@ -572,7 +572,7 @@ void CompositeEditCommand::insertNodeAt(PassRefPtr<Node> insertChild, const Posi
         splitTextNode(downcast<Text>(refChild), offset);
 
         // Mutation events (bug 22634) from the text node insertion may have removed the refChild
-        if (!refChild->inDocument())
+        if (!refChild->isConnected())
             return;
         insertNodeBefore(insertChild, refChild);
     } else
@@ -648,7 +648,7 @@ HTMLElement* CompositeEditCommand::replaceElementWithSpanPreservingChildrenAndAt
     // Returning a raw pointer here is OK because the command is retained by
     // applyCommandToComposite (thus retaining the span), and the span is also
     // in the DOM tree, and thus alive whie it has a parent.
-    ASSERT(command->spanElement()->inDocument());
+    ASSERT(command->spanElement()->isConnected());
     return command->spanElement();
 }
 
@@ -1238,7 +1238,7 @@ void CompositeEditCommand::pushAnchorElementDown(Element& anchorElement)
     setEndingSelection(VisibleSelection::selectionFromContentsOfNode(&anchorElement));
     applyStyledElement(&anchorElement);
     // Clones of anchorElement have been pushed down, now remove it.
-    if (anchorElement.inDocument())
+    if (anchorElement.isConnected())
         removeNodePreservingChildren(&anchorElement);
 }
 
@@ -1485,9 +1485,9 @@ void CompositeEditCommand::moveParagraphs(const VisiblePosition& startOfParagrap
     frame().editor().clearMisspellingsAndBadGrammar(endingSelection());
     deleteSelection(false, false, false, false);
 
-    ASSERT(destination.deepEquivalent().anchorNode()->inDocument());
+    ASSERT(destination.deepEquivalent().anchorNode()->isConnected());
     cleanupAfterDeletion(destination);
-    ASSERT(destination.deepEquivalent().anchorNode()->inDocument());
+    ASSERT(destination.deepEquivalent().anchorNode()->isConnected());
 
     // Add a br if pruning an empty block level element caused a collapse. For example:
     // foo^
index 643f0b9..8242c26 100644 (file)
@@ -536,7 +536,7 @@ void DeleteSelectionCommand::handleGeneralDelete()
             }
         }
         
-        if (m_downstreamEnd.deprecatedNode() != startNode && !m_upstreamStart.deprecatedNode()->isDescendantOf(m_downstreamEnd.deprecatedNode()) && m_downstreamEnd.anchorNode()->inDocument() && m_downstreamEnd.deprecatedEditingOffset() >= caretMinOffset(*m_downstreamEnd.deprecatedNode())) {
+        if (m_downstreamEnd.deprecatedNode() != startNode && !m_upstreamStart.deprecatedNode()->isDescendantOf(m_downstreamEnd.deprecatedNode()) && m_downstreamEnd.anchorNode()->isConnected() && m_downstreamEnd.deprecatedEditingOffset() >= caretMinOffset(*m_downstreamEnd.deprecatedNode())) {
             if (m_downstreamEnd.atLastEditingPositionForNode() && !canHaveChildrenForEditing(*m_downstreamEnd.deprecatedNode())) {
                 // The node itself is fully selected, not just its contents.  Delete it.
                 removeNode(m_downstreamEnd.deprecatedNode());
@@ -553,7 +553,7 @@ void DeleteSelectionCommand::handleGeneralDelete()
                 // know how many children to remove.
                 // FIXME: Make m_upstreamStart a position we update as we remove content, then we can
                 // always know which children to remove.
-                } else if (!(startNodeWasDescendantOfEndNode && !m_upstreamStart.anchorNode()->inDocument())) {
+                } else if (!(startNodeWasDescendantOfEndNode && !m_upstreamStart.anchorNode()->isConnected())) {
                     unsigned offset = 0;
                     if (m_upstreamStart.deprecatedNode()->isDescendantOf(m_downstreamEnd.deprecatedNode())) {
                         Node* n = m_upstreamStart.deprecatedNode();
@@ -605,9 +605,9 @@ void DeleteSelectionCommand::mergeParagraphs()
     ASSERT(!m_pruneStartBlockIfNecessary);
 
     // FIXME: Deletion should adjust selection endpoints as it removes nodes so that we never get into this state (4099839).
-    if (!m_downstreamEnd.anchorNode()->inDocument() || !m_upstreamStart.anchorNode()->inDocument())
+    if (!m_downstreamEnd.anchorNode()->isConnected() || !m_upstreamStart.anchorNode()->isConnected())
          return;
-         
+
     // FIXME: The deletion algorithm shouldn't let this happen.
     if (comparePositions(m_upstreamStart, m_downstreamEnd) > 0)
         return;
@@ -676,7 +676,7 @@ void DeleteSelectionCommand::mergeParagraphs()
 
 void DeleteSelectionCommand::removePreviouslySelectedEmptyTableRows()
 {
-    if (m_endTableRow && m_endTableRow->inDocument() && m_endTableRow != m_startTableRow) {
+    if (m_endTableRow && m_endTableRow->isConnected() && m_endTableRow != m_startTableRow) {
         Node* row = m_endTableRow->previousSibling();
         while (row && row != m_startTableRow) {
             RefPtr<Node> previousRow = row->previousSibling();
@@ -689,7 +689,7 @@ void DeleteSelectionCommand::removePreviouslySelectedEmptyTableRows()
     }
     
     // Remove empty rows after the start row.
-    if (m_startTableRow && m_startTableRow->inDocument() && m_startTableRow != m_endTableRow) {
+    if (m_startTableRow && m_startTableRow->isConnected() && m_startTableRow != m_endTableRow) {
         Node* row = m_startTableRow->nextSibling();
         while (row && row != m_endTableRow) {
             RefPtr<Node> nextRow = row->nextSibling();
@@ -698,8 +698,8 @@ void DeleteSelectionCommand::removePreviouslySelectedEmptyTableRows()
             row = nextRow.get();
         }
     }
-    
-    if (m_endTableRow && m_endTableRow->inDocument() && m_endTableRow != m_startTableRow)
+
+    if (m_endTableRow && m_endTableRow->isConnected() && m_endTableRow != m_startTableRow) {
         if (isTableRowEmpty(m_endTableRow.get())) {
             // Don't remove m_endTableRow if it's where we're putting the ending selection.
             if (!m_endingPosition.deprecatedNode()->isDescendantOf(*m_endTableRow)) {
@@ -709,6 +709,7 @@ void DeleteSelectionCommand::removePreviouslySelectedEmptyTableRows()
                 CompositeEditCommand::removeNode(m_endTableRow.get());
             }
         }
+    }
 }
 
 void DeleteSelectionCommand::calculateTypingStyleAfterDelete()
index 6da305a..a7d68f6 100644 (file)
@@ -3437,7 +3437,7 @@ void Editor::editorUIUpdateTimerFired()
         // When typing we check spelling elsewhere, so don't redo it here.
         // If this is a change in selection resulting from a delete operation,
         // oldSelection may no longer be in the document.
-        if (m_editorUIUpdateTimerShouldCheckSpellingAndGrammar && oldSelection.isContentEditable() && oldSelection.start().deprecatedNode() && oldSelection.start().anchorNode()->inDocument()) {
+        if (m_editorUIUpdateTimerShouldCheckSpellingAndGrammar && oldSelection.isContentEditable() && oldSelection.start().deprecatedNode() && oldSelection.start().anchorNode()->isConnected()) {
             VisiblePosition oldStart(oldSelection.visibleStart());
             VisibleSelection oldAdjacentWords = VisibleSelection(startOfWord(oldStart, LeftWordIfOnBoundary), endOfWord(oldStart, RightWordIfOnBoundary));
             if (oldAdjacentWords != newAdjacentWords) {
index f80b084..8995f1b 100644 (file)
@@ -419,7 +419,7 @@ static bool removingNodeRemovesPosition(Node& node, const Position& position)
 
 void DragCaretController::nodeWillBeRemoved(Node& node)
 {
-    if (!hasCaret() || !node.inDocument())
+    if (!hasCaret() || !node.isConnected())
         return;
 
     if (!removingNodeRemovesPosition(node, m_position.deepEquivalent()))
@@ -435,7 +435,7 @@ void FrameSelection::nodeWillBeRemoved(Node& node)
 {
     // There can't be a selection inside a fragment, so if a fragment's node is being removed,
     // the selection in the document that created the fragment needs no adjustment.
-    if (isNone() || !node.inDocument())
+    if (isNone() || !node.isConnected())
         return;
 
     respondToNodeModification(node, removingNodeRemovesPosition(node, m_selection.base()), removingNodeRemovesPosition(node, m_selection.extent()),
@@ -524,7 +524,7 @@ static void updatePositionAfterAdoptingTextReplacement(Position& position, Chara
 void FrameSelection::textWasReplaced(CharacterData* node, unsigned offset, unsigned oldLength, unsigned newLength)
 {
     // The fragment check is a performance optimization. See http://trac.webkit.org/changeset/30062.
-    if (isNone() || !node || !node->inDocument())
+    if (isNone() || !node || !node->isConnected())
         return;
 
     Position base = m_selection.base();
index e78e16c..0729fc7 100644 (file)
@@ -216,10 +216,10 @@ void IndentOutdentCommand::outdentRegion(const VisiblePosition& startOfSelection
         // outdentParagraph could move more than one paragraph if the paragraph
         // is in a list item. As a result, endAfterSelection and endOfNextParagraph
         // could refer to positions no longer in the document.
-        if (endAfterSelection.isNotNull() && !endAfterSelection.deepEquivalent().anchorNode()->inDocument())
+        if (endAfterSelection.isNotNull() && !endAfterSelection.deepEquivalent().anchorNode()->isConnected())
             break;
 
-        if (endOfNextParagraph.isNotNull() && !endOfNextParagraph.deepEquivalent().anchorNode()->inDocument()) {
+        if (endOfNextParagraph.isNotNull() && !endOfNextParagraph.deepEquivalent().anchorNode()->isConnected()) {
             endOfCurrentParagraph = endingSelection().end();
             endOfNextParagraph = endOfParagraph(endOfCurrentParagraph.next());
         }
index da39f24..812c0b4 100644 (file)
@@ -151,7 +151,7 @@ void InsertLineBreakCommand::doApply()
             deleteInsignificantTextDownstream(endingPosition);
             ASSERT(!textNode.renderer() || textNode.renderer()->style().collapseWhiteSpace());
             // Deleting insignificant whitespace will remove textNode if it contains nothing but insignificant whitespace.
-            if (textNode.inDocument())
+            if (textNode.isConnected())
                 insertTextIntoNode(&textNode, 0, nonBreakingSpaceString());
             else {
                 RefPtr<Text> nbspNode = document().createTextNode(nonBreakingSpaceString());
index 3c2adb4..894a7cf 100644 (file)
@@ -149,7 +149,7 @@ void InsertListCommand::doApply()
                 // infinite loop and because there is no more work to be done.
                 // FIXME(<rdar://problem/5983974>): The endingSelection() may be incorrect here.  Compute 
                 // the new location of endOfSelection and use it as the end of the new selection.
-                if (!startOfLastParagraph.deepEquivalent().anchorNode()->inDocument())
+                if (!startOfLastParagraph.deepEquivalent().anchorNode()->isConnected())
                     return;
                 setEndingSelection(startOfCurrentParagraph);
 
@@ -237,7 +237,7 @@ void InsertListCommand::doApplyForSingleParagraph(bool forceCreateList, const HT
             // Manually remove listNode because moveParagraphWithClones sometimes leaves it behind in the document.
             // See the bug 33668 and editing/execCommand/insert-list-orphaned-item-with-nested-lists.html.
             // FIXME: This might be a bug in moveParagraphWithClones or deleteSelection.
-            if (listNode && listNode->inDocument())
+            if (listNode && listNode->isConnected())
                 removeNode(listNode);
 
             newList = mergeWithNeighboringLists(newList);
index a2fd6ad..36c9f38 100644 (file)
@@ -176,7 +176,7 @@ void InsertTextCommand::doApply()
     // and so deleteInsignificantText could remove it.  Save the position before the node in case that happens.
     Position positionBeforeStartNode(positionInParentBeforeNode(startPosition.containerNode()));
     deleteInsignificantText(startPosition.upstream(), startPosition.downstream());
-    if (!startPosition.anchorNode()->inDocument())
+    if (!startPosition.anchorNode()->isConnected())
         startPosition = positionBeforeStartNode;
     if (!startPosition.isCandidate())
         startPosition = startPosition.downstream();
index 881b11a..db910ca 100644 (file)
@@ -72,14 +72,14 @@ void MoveSelectionCommand::doApply()
     // set the destination to the ending point after the deletion.
     // Fixes: <rdar://problem/3910425> REGRESSION (Mail): Crash in ReplaceSelectionCommand; 
     //        selection is empty, leading to null deref
-    if (!pos.anchorNode()->inDocument())
+    if (!pos.anchorNode()->isConnected())
         pos = endingSelection().start();
 
     cleanupAfterDeletion(pos);
 
     setEndingSelection(VisibleSelection(pos, endingSelection().affinity(), endingSelection().isDirectional()));
     setStartingSelection(endingSelection());
-    if (!pos.anchorNode()->inDocument()) {
+    if (!pos.anchorNode()->isConnected()) {
         // Document was modified out from under us.
         return;
     }
index b96c3a6..e1d0223 100644 (file)
@@ -45,7 +45,7 @@ ReplaceNodeWithSpanCommand::ReplaceNodeWithSpanCommand(PassRefPtr<HTMLElement> e
 
 static void swapInNodePreservingAttributesAndChildren(HTMLElement& newNode, HTMLElement& nodeToReplace)
 {
-    ASSERT(nodeToReplace.inDocument());
+    ASSERT(nodeToReplace.isConnected());
     RefPtr<ContainerNode> parentNode = nodeToReplace.parentNode();
 
     // FIXME: Fix this to send the proper MutationRecords when MutationObservers are present.
@@ -61,7 +61,7 @@ static void swapInNodePreservingAttributesAndChildren(HTMLElement& newNode, HTML
 
 void ReplaceNodeWithSpanCommand::doApply()
 {
-    if (!m_elementToReplace->inDocument())
+    if (!m_elementToReplace->isConnected())
         return;
     if (!m_spanElement)
         m_spanElement = HTMLSpanElement::create(m_elementToReplace->document());
@@ -70,7 +70,7 @@ void ReplaceNodeWithSpanCommand::doApply()
 
 void ReplaceNodeWithSpanCommand::doUnapply()
 {
-    if (!m_spanElement->inDocument())
+    if (!m_spanElement->isConnected())
         return;
     swapInNodePreservingAttributesAndChildren(*m_elementToReplace, *m_spanElement);
 }
index df6e9b8..2ee3732 100644 (file)
@@ -1120,7 +1120,7 @@ void ReplaceSelectionCommand::doApply()
     }
 
     // Mutation events (bug 22634) may have already removed the inserted content
-    if (!refNode->inDocument())
+    if (!refNode->isConnected())
         return;
 
     bool plainTextFragment = isPlainTextMarkup(refNode.get());
@@ -1132,7 +1132,7 @@ void ReplaceSelectionCommand::doApply()
         insertedNodes.respondToNodeInsertion(node.get());
 
         // Mutation events (bug 22634) may have already removed the inserted content
-        if (!node->inDocument())
+        if (!node->isConnected())
             return;
 
         refNode = node;
@@ -1147,7 +1147,7 @@ void ReplaceSelectionCommand::doApply()
         handleStyleSpans(insertedNodes);
 
     // Mutation events (bug 20161) may have already removed the inserted content
-    if (!insertedNodes.firstNodeInserted() || !insertedNodes.firstNodeInserted()->inDocument())
+    if (!insertedNodes.firstNodeInserted() || !insertedNodes.firstNodeInserted()->isConnected())
         return;
 
     VisiblePosition startOfInsertedContent = firstPositionInOrBeforeNode(insertedNodes.firstNodeInserted());
@@ -1203,7 +1203,7 @@ void ReplaceSelectionCommand::doApply()
         if (startOfParagraph(endOfInsertedContent) == startOfParagraphToMove) {
             insertNodeAt(HTMLBRElement::create(document()), endOfInsertedContent.deepEquivalent());
             // Mutation events (bug 22634) triggered by inserting the <br> might have removed the content we're about to move
-            if (!startOfParagraphToMove.deepEquivalent().anchorNode()->inDocument())
+            if (!startOfParagraphToMove.deepEquivalent().anchorNode()->isConnected())
                 return;
         }
 
@@ -1279,9 +1279,9 @@ RefPtr<DataTransfer> ReplaceSelectionCommand::inputEventDataTransfer() const
 
 bool ReplaceSelectionCommand::shouldRemoveEndBR(Node* endBR, const VisiblePosition& originalVisPosBeforeEndBR)
 {
-    if (!endBR || !endBR->inDocument())
+    if (!endBR || !endBR->isConnected())
         return false;
-        
+
     VisiblePosition visiblePos(positionBeforeNode(endBR));
     
     // Don't remove the br if nothing was inserted.
index 023b744..53242bb 100644 (file)
@@ -78,7 +78,7 @@ void FormAssociatedElement::insertedInto(ContainerNode& insertionPoint)
     if (m_form && element.rootElement() != m_form->rootElement())
         setForm(nullptr);
 
-    if (!insertionPoint.inDocument())
+    if (!insertionPoint.isConnected())
         return;
 
     if (element.hasAttributeWithoutSynchronization(formAttr))
@@ -86,7 +86,7 @@ void FormAssociatedElement::insertedInto(ContainerNode& insertionPoint)
 }
 
 // Compute the highest ancestor instead of calling Node::rootNode in removedFrom / formRemovedFromTree
-// since inDocument flag on some form associated elements may not have been updated yet.
+// since isConnected flag on some form associated elements may not have been updated yet.
 static Node* computeRootNode(Node& node)
 {
     Node* current = &node;
@@ -99,7 +99,7 @@ static Node* computeRootNode(Node& node)
 void FormAssociatedElement::removedFrom(ContainerNode& insertionPoint)
 {
     HTMLElement& element = asHTMLElement();
-    if (insertionPoint.inDocument() && element.hasAttributeWithoutSynchronization(formAttr))
+    if (insertionPoint.isConnected() && element.hasAttributeWithoutSynchronization(formAttr))
         m_formAttributeTargetObserver = nullptr;
     // If the form and element are both in the same tree, preserve the connection to the form.
     // Otherwise, null out our form and remove ourselves from the form's list of elements.
@@ -110,7 +110,7 @@ void FormAssociatedElement::removedFrom(ContainerNode& insertionPoint)
 HTMLFormElement* FormAssociatedElement::findAssociatedForm(const HTMLElement* element, HTMLFormElement* currentAssociatedForm)
 {
     const AtomicString& formId(element->attributeWithoutSynchronization(formAttr));
-    if (!formId.isNull() && element->inDocument()) {
+    if (!formId.isNull() && element->isConnected()) {
         // The HTML5 spec says that the element should be associated with
         // the first element in the document to have an ID that equal to
         // the value of form attribute, so we put the result of
@@ -171,7 +171,7 @@ void FormAssociatedElement::resetFormOwner()
     HTMLFormElement* originalForm = m_form;
     setForm(findAssociatedForm(&asHTMLElement(), m_form));
     HTMLElement& element = asHTMLElement();
-    if (m_form && m_form != originalForm && m_form->inDocument())
+    if (m_form && m_form != originalForm && m_form->isConnected())
         element.document().didAssociateFormControl(&element);
 }
 
@@ -182,12 +182,12 @@ void FormAssociatedElement::formAttributeChanged()
         // The form attribute removed. We need to reset form owner here.
         HTMLFormElement* originalForm = m_form;
         setForm(HTMLFormElement::findClosestFormAncestor(element));
-        if (m_form && m_form != originalForm && m_form->inDocument())
+        if (m_form && m_form != originalForm && m_form->isConnected())
             element.document().didAssociateFormControl(&element);
         m_formAttributeTargetObserver = nullptr;
     } else {
         resetFormOwner();
-        if (element.inDocument())
+        if (element.isConnected())
             resetFormAttributeTargetObserver();
     }
 }
index 614a0ce..fcfd67b 100644 (file)
@@ -54,7 +54,7 @@ void HTMLBaseElement::parseAttribute(const QualifiedName& name, const AtomicStri
 Node::InsertionNotificationRequest HTMLBaseElement::insertedInto(ContainerNode& insertionPoint)
 {
     HTMLElement::insertedInto(insertionPoint);
-    if (insertionPoint.inDocument())
+    if (insertionPoint.isConnected())
         document().processBaseElement();
     return InsertionDone;
 }
@@ -62,7 +62,7 @@ Node::InsertionNotificationRequest HTMLBaseElement::insertedInto(ContainerNode&
 void HTMLBaseElement::removedFrom(ContainerNode& insertionPoint)
 {
     HTMLElement::removedFrom(insertionPoint);
-    if (insertionPoint.inDocument())
+    if (insertionPoint.isConnected())
         document().processBaseElement();
 }
 
index d15e165..fb8841f 100644 (file)
@@ -189,7 +189,7 @@ void HTMLBodyElement::parseAttribute(const QualifiedName& name, const AtomicStri
 Node::InsertionNotificationRequest HTMLBodyElement::insertedInto(ContainerNode& insertionPoint)
 {
     HTMLElement::insertedInto(insertionPoint);
-    if (!insertionPoint.inDocument())
+    if (!insertionPoint.isConnected())
         return InsertionDone;
 
     // FIXME: It's surprising this is web compatible since it means a marginwidth and marginheight attribute can
index 480126b..643a2e7 100644 (file)
@@ -111,7 +111,7 @@ protected:
 
 inline ContainerNode& HTMLCollection::rootNode() const
 {
-    if (isRootedAtDocument() && ownerNode().inDocument())
+    if (isRootedAtDocument() && ownerNode().isConnected())
         return ownerNode().document();
 
     return ownerNode();
index f81ef6a..2654fbb 100644 (file)
@@ -514,7 +514,7 @@ ExceptionOr<void> HTMLElement::setInnerText(const String& text)
     // FIXME: Can the renderer be out of date here? Do we need to call updateStyleIfNeeded?
     // For example, for the contents of textarea elements that are display:none?
     auto* r = renderer();
-    if ((r && r->style().preserveNewline()) || (inDocument() && isTextControlInnerTextElement())) {
+    if ((r && r->style().preserveNewline()) || (isConnected() && isTextControlInnerTextElement())) {
         if (!text.contains('\r')) {
             replaceAllChildren(document().createTextNode(text));
             return { };
index 62c2861..a9c144d 100644 (file)
@@ -199,7 +199,7 @@ static bool shouldAutofocus(HTMLFormControlElement* element)
         return false;
     if (!element->hasAttributeWithoutSynchronization(autofocusAttr))
         return false;
-    if (!element->inDocument() || !element->document().renderView())
+    if (!element->isConnected() || !element->document().renderView())
         return false;
     if (element->document().isSandboxed(SandboxAutomaticFeatures)) {
         // FIXME: This message should be moved off the console once a solution to https://bugs.webkit.org/show_bug.cgi?id=103274 exists.
@@ -483,7 +483,7 @@ bool HTMLFormControlElement::checkValidity(Vector<RefPtr<HTMLFormControlElement>
     Ref<HTMLFormControlElement> protectedThis(*this);
     Ref<Document> originalDocument(document());
     bool needsDefaultAction = dispatchEvent(Event::create(eventNames().invalidEvent, false, true));
-    if (needsDefaultAction && unhandledInvalidControls && inDocument() && originalDocument.ptr() == &document())
+    if (needsDefaultAction && unhandledInvalidControls && isConnected() && originalDocument.ptr() == &document())
         unhandledInvalidControls->append(this);
     return false;
 }
@@ -501,7 +501,7 @@ bool HTMLFormControlElement::reportValidity()
     // has !renderer()->needsLayout() assertion.
     document().updateLayoutIgnorePendingStylesheets();
 
-    if (inDocument() && isFocusable()) {
+    if (isConnected() && isFocusable()) {
         focusAndShowValidationMessage();
         return false;
     }
index e1c47cf..676b27c 100644 (file)
@@ -42,14 +42,14 @@ HTMLFormControlElementWithState::~HTMLFormControlElementWithState()
 
 Node::InsertionNotificationRequest HTMLFormControlElementWithState::insertedInto(ContainerNode& insertionPoint)
 {
-    if (insertionPoint.inDocument() && !containingShadowRoot())
+    if (insertionPoint.isConnected() && !containingShadowRoot())
         document().formController().registerFormElementWithState(this);
     return HTMLFormControlElement::insertedInto(insertionPoint);
 }
 
 void HTMLFormControlElementWithState::removedFrom(ContainerNode& insertionPoint)
 {
-    if (insertionPoint.inDocument() && !containingShadowRoot() && !insertionPoint.containingShadowRoot())
+    if (insertionPoint.isConnected() && !containingShadowRoot() && !insertionPoint.containingShadowRoot())
         document().formController().unregisterFormElementWithState(this);
     HTMLFormControlElement::removedFrom(insertionPoint);
 }
@@ -64,7 +64,7 @@ bool HTMLFormControlElementWithState::shouldAutocomplete() const
 bool HTMLFormControlElementWithState::shouldSaveAndRestoreFormControlState() const
 {
     // We don't save/restore control state in a form with autocomplete=off.
-    return inDocument() && shouldAutocomplete();
+    return isConnected() && shouldAutocomplete();
 }
 
 FormControlState HTMLFormControlElementWithState::saveFormControlState() const
index 640e33e..d62fcf4 100644 (file)
@@ -128,7 +128,7 @@ bool HTMLFormElement::rendererIsNeeded(const RenderStyle& style)
 Node::InsertionNotificationRequest HTMLFormElement::insertedInto(ContainerNode& insertionPoint)
 {
     HTMLElement::insertedInto(insertionPoint);
-    if (insertionPoint.inDocument())
+    if (insertionPoint.isConnected())
         document().didAssociateFormControl(this);
     return InsertionDone;
 }
@@ -249,7 +249,7 @@ bool HTMLFormElement::validateInteractively()
 
     // Focus on the first focusable control and show a validation message.
     for (auto& control : unhandledInvalidControls) {
-        if (control->inDocument() && control->isFocusable()) {
+        if (control->isConnected() && control->isFocusable()) {
             control->focusAndShowValidationMessage();
             break;
         }
@@ -258,7 +258,7 @@ bool HTMLFormElement::validateInteractively()
     // Warn about all of unfocusable controls.
     if (document().frame()) {
         for (auto& control : unhandledInvalidControls) {
-            if (control->inDocument() && control->isFocusable())
+            if (control->isConnected() && control->isFocusable())
                 continue;
             String message = makeString("An invalid form control with name='", control->name(), "' is not focusable.");
             document().addConsoleMessage(MessageSource::Rendering, MessageLevel::Error, message);
index 1e902a3..5dd142a 100644 (file)
@@ -135,14 +135,14 @@ void HTMLFrameElementBase::setNameAndOpenURL()
 Node::InsertionNotificationRequest HTMLFrameElementBase::insertedInto(ContainerNode& insertionPoint)
 {
     HTMLFrameOwnerElement::insertedInto(insertionPoint);
-    if (insertionPoint.inDocument())
+    if (insertionPoint.isConnected())
         return InsertionShouldCallFinishedInsertingSubtree;
     return InsertionDone;
 }
 
 void HTMLFrameElementBase::finishedInsertingSubtree()
 {
-    if (!inDocument())
+    if (!isConnected())
         return;
 
     // DocumentFragments don't kick of any loads.
@@ -180,7 +180,7 @@ void HTMLFrameElementBase::setLocation(const String& str)
 
     m_URL = AtomicString(str);
 
-    if (inDocument())
+    if (isConnected())
         openURL(LockHistory::No, LockBackForwardList::No);
 }
 
index 71b6221..3779ec9 100644 (file)
@@ -55,7 +55,7 @@ void HTMLFrameOwnerElement::setContentFrame(Frame* frame)
     ASSERT(!m_contentFrame || m_contentFrame->ownerElement() != this);
     ASSERT(frame);
     // Disconnected frames should not be allowed to load.
-    ASSERT(inDocument());
+    ASSERT(isConnected());
     m_contentFrame = frame;
 
     for (ContainerNode* node = this; node; node = node->parentOrShadowHostNode())
index 42a5c18..01c5d1f 100644 (file)
@@ -208,7 +208,7 @@ void HTMLFrameSetElement::willRecalcStyle(Style::Change)
 Node::InsertionNotificationRequest HTMLFrameSetElement::insertedInto(ContainerNode& insertionPoint)
 {
     HTMLElement::insertedInto(insertionPoint);
-    if (insertionPoint.inDocument()) {
+    if (insertionPoint.isConnected()) {
         if (Frame* frame = document().frame())
             frame->loader().client().dispatchDidBecomeFrameset(document().isFrameSet());
     }
@@ -219,7 +219,7 @@ Node::InsertionNotificationRequest HTMLFrameSetElement::insertedInto(ContainerNo
 void HTMLFrameSetElement::removedFrom(ContainerNode& insertionPoint)
 {
     HTMLElement::removedFrom(insertionPoint);
-    if (insertionPoint.inDocument()) {
+    if (insertionPoint.isConnected()) {
         if (Frame* frame = document().frame())
             frame->loader().client().dispatchDidBecomeFrameset(document().isFrameSet());
     }
index a7213d7..c912ca1 100644 (file)
@@ -204,12 +204,12 @@ void HTMLImageElement::parseAttribute(const QualifiedName& name, const AtomicStr
     } else if (name == srcAttr || name == srcsetAttr || name == sizesAttr)
         selectImageSource();
     else if (name == usemapAttr) {
-        if (inDocument() && !m_parsedUsemap.isNull())
+        if (isConnected() && !m_parsedUsemap.isNull())
             document().removeImageElementByUsemap(*m_parsedUsemap.impl(), *this);
 
         m_parsedUsemap = parseHTMLHashNameReference(value);
 
-        if (inDocument() && !m_parsedUsemap.isNull())
+        if (isConnected() && !m_parsedUsemap.isNull())
             document().addImageElementByUsemap(*m_parsedUsemap.impl(), *this);
     } else if (name == compositeAttr) {
         // FIXME: images don't support blend modes in their compositing attribute.
@@ -224,7 +224,7 @@ void HTMLImageElement::parseAttribute(const QualifiedName& name, const AtomicStr
     } else {
         if (name == nameAttr) {
             bool willHaveName = !value.isNull();
-            if (m_hadNameBeforeAttributeChanged != willHaveName && inDocument() && !isInShadowTree() && is<HTMLDocument>(document())) {
+            if (m_hadNameBeforeAttributeChanged != willHaveName && isConnected() && !isInShadowTree() && is<HTMLDocument>(document())) {
                 HTMLDocument& document = downcast<HTMLDocument>(this->document());
                 const AtomicString& id = getIdAttribute();
                 if (!id.isEmpty() && id != getNameAttribute()) {
@@ -313,7 +313,7 @@ Node::InsertionNotificationRequest HTMLImageElement::insertedInto(ContainerNode&
     // in callbacks back to this node.
     Node::InsertionNotificationRequest insertNotificationRequest = HTMLElement::insertedInto(insertionPoint);
 
-    if (insertionPoint.inDocument() && !m_parsedUsemap.isNull())
+    if (insertionPoint.isConnected() && !m_parsedUsemap.isNull())
         document().addImageElementByUsemap(*m_parsedUsemap.impl(), *this);
 
     if (is<HTMLPictureElement>(parentNode())) {
@@ -323,7 +323,7 @@ Node::InsertionNotificationRequest HTMLImageElement::insertedInto(ContainerNode&
 
     // If we have been inserted from a renderer-less document,
     // our loader may have not fetched the image, so do it now.
-    if (insertionPoint.inDocument() && !m_imageLoader.image())
+    if (insertionPoint.isConnected() && !m_imageLoader.image())
         m_imageLoader.updateFromElement();
 
     return insertNotificationRequest;
@@ -334,7 +334,7 @@ void HTMLImageElement::removedFrom(ContainerNode& insertionPoint)
     if (m_form)
         m_form->removeImgElement(this);
 
-    if (insertionPoint.inDocument() && !m_parsedUsemap.isNull())
+    if (insertionPoint.isConnected() && !m_parsedUsemap.isNull())
         document().removeImageElementByUsemap(*m_parsedUsemap.impl(), *this);
     
     if (is<HTMLPictureElement>(parentNode()))
index 4bafd48..5e3e7b9 100644 (file)
@@ -84,7 +84,7 @@ void HTMLImageLoader::notifyFinished(CachedResource&)
 
     bool loadError = cachedImage.errorOccurred() || cachedImage.response().httpStatusCode() >= 400;
     if (!loadError) {
-        if (!element().inDocument()) {
+        if (!element().isConnected()) {
             JSC::VM& vm = commonVM();
             JSC::JSLockHolder lock(vm);
             // FIXME: Adopt reportExtraMemoryVisited, and switch to reportExtraMemoryAllocated.
index b982492..42a5234 100644 (file)
@@ -923,7 +923,7 @@ void HTMLInputElement::setChecked(bool nowChecked, TextFieldEventBehavior eventB
     // unchecked to match other browsers. DOM is not a useful standard for this
     // because it says only to fire change events at "lose focus" time, which is
     // definitely wrong in practice for these types of elements.
-    if (eventBehavior != DispatchNoEvent && inDocument() && m_inputType->shouldSendChangeEventAfterCheckedChanged()) {
+    if (eventBehavior != DispatchNoEvent && isConnected() && m_inputType->shouldSendChangeEventAfterCheckedChanged()) {
         setTextAsOfLastFormControlChangeEvent(String());
         dispatchFormControlChangeEvent();
     }
@@ -1509,16 +1509,16 @@ Node::InsertionNotificationRequest HTMLInputElement::insertedInto(ContainerNode&
 void HTMLInputElement::finishedInsertingSubtree()
 {
     HTMLTextFormControlElement::finishedInsertingSubtree();
-    if (inDocument() && !form())
+    if (isConnected() && !form())
         addToRadioButtonGroup();
 }
 
 void HTMLInputElement::removedFrom(ContainerNode& insertionPoint)
 {
-    if (insertionPoint.inDocument() && !form())
+    if (insertionPoint.isConnected() && !form())
         removeFromRadioButtonGroup();
     HTMLTextFormControlElement::removedFrom(insertionPoint);
-    ASSERT(!inDocument());
+    ASSERT(!isConnected());
 #if ENABLE(DATALIST_ELEMENT)
     resetListAttributeTargetObserver();
 #endif
@@ -1604,7 +1604,7 @@ HTMLDataListElement* HTMLInputElement::dataList() const
 
 void HTMLInputElement::resetListAttributeTargetObserver()
 {
-    if (inDocument())
+    if (isConnected())
         m_listAttributeTargetObserver = std::make_unique<ListAttributeTargetObserver>(attributeWithoutSynchronization(listAttr), this);
     else
         m_listAttributeTargetObserver = nullptr;
@@ -1870,7 +1870,7 @@ RadioButtonGroups* HTMLInputElement::radioButtonGroups() const
         return nullptr;
     if (auto* formElement = form())
         return &formElement->radioButtonGroups();
-    if (inDocument())
+    if (isConnected())
         return &document().formController().radioButtonGroups();
     return nullptr;
 }
index 010ffc4..8f5ac0c 100644 (file)
@@ -71,7 +71,7 @@ LabelableElement* HTMLLabelElement::control() const
         }
         return nullptr;
     }
-    return inDocument() ? firstElementWithIdIfLabelable(treeScope(), controlId) : nullptr;
+    return isConnected() ? firstElementWithIdIfLabelable(treeScope(), controlId) : nullptr;
 }
 
 HTMLFormElement* HTMLLabelElement::form() const
index 52af1ff..f23862e 100644 (file)
@@ -113,8 +113,8 @@ void HTMLLinkElement::setDisabledState(bool disabled)
     if (oldDisabledState == m_disabledState)
         return;
 
-    ASSERT(inDocument() || !styleSheetIsLoading());
-    if (!inDocument())
+    ASSERT(isConnected() || !styleSheetIsLoading());
+    if (!isConnected())
         return;
 
     // If we change the disabled state while the sheet is still loading, then we have to
@@ -202,7 +202,7 @@ bool HTMLLinkElement::shouldLoadLink()
     if (!dispatchBeforeLoadEvent(getNonEmptyURLAttribute(hrefAttr)))
         return false;
     // A beforeload handler might have removed us from the document or changed the document.
-    if (!inDocument() || &document() != originalDocument.ptr())
+    if (!isConnected() || &document() != originalDocument.ptr())
         return false;
     return true;
 }
@@ -219,7 +219,7 @@ String HTMLLinkElement::crossOrigin() const
 
 void HTMLLinkElement::process()
 {
-    if (!inDocument()) {
+    if (!isConnected()) {
         ASSERT(!m_sheet);
         return;
     }
@@ -302,9 +302,9 @@ void HTMLLinkElement::clearSheet()
 
 Node::InsertionNotificationRequest HTMLLinkElement::insertedInto(ContainerNode& insertionPoint)
 {
-    bool wasInDocument = inDocument();
+    bool wasInDocument = isConnected();
     HTMLElement::insertedInto(insertionPoint);
-    if (!insertionPoint.inDocument() || wasInDocument)
+    if (!insertionPoint.isConnected() || wasInDocument)
         return InsertionDone;
 
     m_styleScope = &Style::Scope::forNode(*this);
@@ -317,7 +317,7 @@ Node::InsertionNotificationRequest HTMLLinkElement::insertedInto(ContainerNode&
 void HTMLLinkElement::removedFrom(ContainerNode& insertionPoint)
 {
     HTMLElement::removedFrom(insertionPoint);
-    if (!insertionPoint.inDocument() || inDocument())
+    if (!insertionPoint.isConnected() || isConnected())
         return;
 
     if (m_sheet)
@@ -353,7 +353,7 @@ void HTMLLinkElement::initializeStyleSheet(Ref<StyleSheetContents>&& styleSheet,
 
 void HTMLLinkElement::setCSSStyleSheet(const String& href, const URL& baseURL, const String& charset, const CachedCSSStyleSheet* cachedStyleSheet)
 {
-    if (!inDocument()) {
+    if (!isConnected()) {
         ASSERT(!m_sheet);
         return;
     }
index b18b484..01e6eda 100644 (file)
@@ -94,13 +94,13 @@ void HTMLMapElement::parseAttribute(const QualifiedName& name, const AtomicStrin
             if (document().isHTMLDocument())
                 return;
         }
-        if (inDocument())
+        if (isConnected())
             treeScope().removeImageMap(*this);
         String mapName = value;
         if (mapName[0] == '#')
             mapName = mapName.substring(1);
         m_name = mapName;
-        if (inDocument())
+        if (isConnected())
             treeScope().addImageMap(*this);
 
         return;
@@ -117,14 +117,14 @@ Ref<HTMLCollection> HTMLMapElement::areas()
 Node::InsertionNotificationRequest HTMLMapElement::insertedInto(ContainerNode& insertionPoint)
 {
     Node::InsertionNotificationRequest request = HTMLElement::insertedInto(insertionPoint);
-    if (insertionPoint.inDocument())
+    if (insertionPoint.isConnected())
         treeScope().addImageMap(*this);
     return request;
 }
 
 void HTMLMapElement::removedFrom(ContainerNode& insertionPoint)
 {
-    if (insertionPoint.inDocument())
+    if (insertionPoint.isConnected())
         treeScope().removeImageMap(*this);
     HTMLElement::removedFrom(insertionPoint);
 }
index db83974..d9ebb12 100644 (file)
@@ -817,7 +817,7 @@ Node::InsertionNotificationRequest HTMLMediaElement::insertedInto(ContainerNode&
     LOG(Media, "HTMLMediaElement::insertedInto(%p)", this);
 
     HTMLElement::insertedInto(insertionPoint);
-    if (insertionPoint.inDocument()) {
+    if (insertionPoint.isConnected()) {
         m_inActiveDocument = true;
 
 #if PLATFORM(IOS)
@@ -876,7 +876,7 @@ void HTMLMediaElement::removedFrom(ContainerNode& insertionPoint)
     LOG(Media, "HTMLMediaElement::removedFrom(%p)", this);
 
     m_inActiveDocument = false;
-    if (insertionPoint.inDocument()) {
+    if (insertionPoint.isConnected()) {
         // Pause asynchronously to let the operation that removed us finish, in case we get inserted back into a document.
         m_pauseAfterDetachedTaskQueue.enqueueTask(std::bind(&HTMLMediaElement::pauseAfterDetachedTask, this));
     }
@@ -5847,7 +5847,7 @@ bool HTMLMediaElement::createMediaControls()
 
     ensureUserAgentShadowRoot().appendChild(mediaControls);
 
-    if (!controls() || !inDocument())
+    if (!controls() || !isConnected())
         mediaControls->hide();
 
     return true;
@@ -5872,12 +5872,12 @@ void HTMLMediaElement::configureMediaControls()
 #endif
 
 #if ENABLE(MEDIA_CONTROLS_SCRIPT)
-    if (!requireControls || !inDocument() || !inActiveDocument())
+    if (!requireControls || !isConnected() || !inActiveDocument())
         return;
 
     ensureMediaControlsShadowRoot();
 #else
-    if (!requireControls || !inDocument() || !inActiveDocument()) {
+    if (!requireControls || !isConnected() || !inActiveDocument()) {
         if (hasMediaControls())
             mediaControls()->hide();
         return;
index c3ed820..15f0021 100644 (file)
@@ -63,7 +63,7 @@ void HTMLMetaElement::parseAttribute(const QualifiedName& name, const AtomicStri
 Node::InsertionNotificationRequest HTMLMetaElement::insertedInto(ContainerNode& insertionPoint)
 {
     HTMLElement::insertedInto(insertionPoint);
-    if (insertionPoint.inDocument())
+    if (insertionPoint.isConnected())
         process();
     return InsertionDone;
 }
@@ -71,7 +71,7 @@ Node::InsertionNotificationRequest HTMLMetaElement::insertedInto(ContainerNode&
 void HTMLMetaElement::process()
 {
     // Changing a meta tag while it's not in the tree shouldn't have any effect on the document.
-    if (!inDocument())
+    if (!isConnected())
         return;
 
     const AtomicString& contentValue = attributeWithoutSynchronization(contentAttr);
index ca90972..e8620a8 100644 (file)
@@ -127,7 +127,7 @@ void HTMLObjectElement::parseAttribute(const QualifiedName& name, const AtomicSt
     } else
         HTMLPlugInImageElement::parseAttribute(name, value);
 
-    if (!invalidateRenderer || !inDocument() || !renderer())
+    if (!invalidateRenderer || !isConnected() || !renderer())
         return;
 
     clearUseFallbackContent();
@@ -349,7 +349,7 @@ void HTMLObjectElement::removedFrom(ContainerNode& insertionPoint)
 void HTMLObjectElement::childrenChanged(const ChildChange& change)
 {
     updateDocNamedItem();
-    if (inDocument() && !useFallbackContent()) {
+    if (isConnected() && !useFallbackContent()) {
         setNeedsWidgetUpdate(true);
         invalidateStyleForSubtree();
     }
@@ -371,7 +371,7 @@ void HTMLObjectElement::renderFallbackContent()
     if (useFallbackContent())
         return;
     
-    if (!inDocument())
+    if (!isConnected())
         return;
 
     invalidateStyleAndRenderersForSubtree();
@@ -442,7 +442,7 @@ void HTMLObjectElement::updateDocNamedItem()
             isNamedItem = false;
         child = child->nextSibling();
     }
-    if (isNamedItem != wasNamedItem && inDocument() && !isInShadowTree() && is<HTMLDocument>(document())) {
+    if (isNamedItem != wasNamedItem && isConnected() && !isInShadowTree() && is<HTMLDocument>(document())) {
         HTMLDocument& document = downcast<HTMLDocument>(this->document());
 
         const AtomicString& id = getIdAttribute();
index a8cb8e5..3fded5c 100644 (file)
@@ -262,7 +262,7 @@ void HTMLPlugInImageElement::finishParsingChildren()
     // HTMLObjectElement needs to delay widget updates until after all children are parsed,
     // For HTMLEmbedElement this delay is unnecessary, but there is no harm in doing the same.
     setNeedsWidgetUpdate(true);
-    if (inDocument())
+    if (isConnected())
         invalidateStyleForSubtree();
 }
 
index bc8b07c..ea09e55 100644 (file)
@@ -759,11 +759,11 @@ void HTMLSelectElement::setRecalcListItems()
     m_activeSelectionAnchorIndex = -1;
     setOptionsChangedOnRenderer();
     invalidateStyleForSubtree();
-    if (!inDocument()) {
+    if (!isConnected()) {
         if (HTMLCollection* collection = cachedHTMLCollection(SelectOptions))
             collection->invalidateCache(document());
     }
-    if (!inDocument())
+    if (!isConnected())
         invalidateSelectedItems();
     if (auto* cache = document().existingAXObjectCache())
         cache->childrenChanged(this);
index 65234aa..f7e9d5e 100644 (file)
@@ -97,9 +97,9 @@ void HTMLStyleElement::finishParsingChildren()
 
 Node::InsertionNotificationRequest HTMLStyleElement::insertedInto(ContainerNode& insertionPoint)
 {
-    bool wasInDocument = inDocument();
+    bool wasInDocument = isConnected();
     auto result = HTMLElement::insertedInto(insertionPoint);
-    if (insertionPoint.inDocument() && !wasInDocument)
+    if (insertionPoint.isConnected() && !wasInDocument)
         m_styleSheetOwner.insertedIntoDocument(*this);
     return result;
 }
@@ -107,7 +107,7 @@ Node::InsertionNotificationRequest HTMLStyleElement::insertedInto(ContainerNode&
 void HTMLStyleElement::removedFrom(ContainerNode& insertionPoint)
 {
     HTMLElement::removedFrom(insertionPoint);
-    if (insertionPoint.inDocument() && !inDocument())
+    if (insertionPoint.isConnected() && !isConnected())
         m_styleSheetOwner.removedFromDocument(*this);
 }
 
index a9a5374..e8cd483 100644 (file)
@@ -82,7 +82,7 @@ bool HTMLTextFormControlElement::childShouldCreateRenderer(const Node& child) co
 Node::InsertionNotificationRequest HTMLTextFormControlElement::insertedInto(ContainerNode& insertionPoint)
 {
     InsertionNotificationRequest insertionNotificationRequest = HTMLFormControlElementWithState::insertedInto(insertionPoint);
-    if (!insertionPoint.inDocument())
+    if (!insertionPoint.isConnected())
         return insertionNotificationRequest;
     String initialValue = value();
     setTextAsOfLastFormControlChangeEvent(initialValue.isNull() ? emptyString() : initialValue);
index 1de4d7e..81ba8de 100644 (file)
@@ -53,7 +53,7 @@ Ref<HTMLTitleElement> HTMLTitleElement::create(const QualifiedName& tagName, Doc
 Node::InsertionNotificationRequest HTMLTitleElement::insertedInto(ContainerNode& insertionPoint)
 {
     HTMLElement::insertedInto(insertionPoint);
-    if (inDocument() && !isInShadowTree())
+    if (isConnected() && !isInShadowTree())
         document().titleElementAdded(*this);
     return InsertionDone;
 }
@@ -61,7 +61,7 @@ Node::InsertionNotificationRequest HTMLTitleElement::insertedInto(ContainerNode&
 void HTMLTitleElement::removedFrom(ContainerNode& insertionPoint)
 {
     HTMLElement::removedFrom(insertionPoint);
-    if (insertionPoint.inDocument() && !insertionPoint.isInShadowTree())
+    if (insertionPoint.isConnected() && !insertionPoint.isInShadowTree())
         document().titleElementRemoved(*this);
 }
 
index 9dc8f04..052fa31 100644 (file)
@@ -58,7 +58,7 @@ static Color parseColor(const String& colorString, Document* document = nullptr)
 
 Color currentColor(HTMLCanvasElement* canvas)
 {
-    if (!canvas || !canvas->inDocument() || !canvas->inlineStyle())
+    if (!canvas || !canvas->isConnected() || !canvas->inlineStyle())
         return Color::black;
     Color color = CSSParser::parseColor(canvas->inlineStyle()->getPropertyValue(CSSPropertyColor));
     if (!color.isValid())
index d586e29..d565382 100644 (file)
@@ -392,7 +392,7 @@ bool DOMSelection::containsNode(Node& node, bool allowPartial) const
     auto selectedRange = selection.selection().toNormalizedRange();
 
     ContainerNode* parentNode = node.parentNode();
-    if (!parentNode || !parentNode->inDocument())
+    if (!parentNode || !parentNode->isConnected())
         return false;
     unsigned nodeIndex = node.computeNodeIndex();
 
index 2cf4867..03d483b 100644 (file)
@@ -3400,7 +3400,7 @@ void EventHandler::dragSourceEndedAt(const PlatformMouseEvent& event, DragOperat
 void EventHandler::updateDragStateAfterEditDragIfNeeded(Element& rootEditableElement)
 {
     // If inserting the dragged contents removed the drag source, we still want to fire dragend at the root editable element.
-    if (dragState().source && !dragState().source->inDocument())
+    if (dragState().source && !dragState().source->isConnected())
         dragState().source = &rootEditableElement;
 }
 
index 31cc659..26b3cbf 100644 (file)
@@ -48,7 +48,7 @@ PointerLockController::PointerLockController(Page& page)
 
 void PointerLockController::requestPointerLock(Element* target)
 {
-    if (!target || !target->inDocument() || m_documentOfRemovedElementWhileWaitingForUnlock) {
+    if (!target || !target->isConnected() || m_documentOfRemovedElementWhileWaitingForUnlock) {
         enqueueEvent(eventNames().pointerlockerrorEvent, target);
         return;
     }
index 7679a48..d22585a 100644 (file)
@@ -755,11 +755,11 @@ Node* HitTestResult::targetNode() const
     Node* node = innerNode();
     if (!node)
         return 0;
-    if (node->inDocument())
+    if (node->isConnected())
         return node;
 
     Element* element = node->parentElement();
-    if (element && element->inDocument())
+    if (element && element->isConnected())
         return element;
 
     return node;
index 0ba9bd7..2c3385d 100644 (file)
@@ -39,7 +39,7 @@ RenderTextControlMultiLine::RenderTextControlMultiLine(HTMLTextAreaElement& elem
 
 RenderTextControlMultiLine::~RenderTextControlMultiLine()
 {
-    if (textAreaElement().inDocument())
+    if (textAreaElement().isConnected())
         textAreaElement().rendererWillBeDestroyed();
 }
 
index bdcaedf..5ebe583 100644 (file)
@@ -70,7 +70,7 @@ static void logDispatchedDOMEvent(const Event& event, bool eventIsUnrelated)
         LOG(WebReplay, "%-20s --->%s DOM event: type=%s, target=%u/node[%p] %s\n", "ReplayEvents",
             (eventIsUnrelated) ? "Unrelated" : "Dispatching",
             event.type().string().utf8().data(),
-            frameIndexFromDocument((node->inDocument()) ? &node->document() : node->ownerDocument()),
+            frameIndexFromDocument((node->isConnected()) ? &node->document() : node->ownerDocument()),
             node,
             node->nodeName().utf8().data());
     } else if (DOMWindow* window = target->toDOMWindow()) {
@@ -452,7 +452,7 @@ void ReplayController::willDispatchEvent(const Event& event, Frame* frame)
     Document* document = frame ? frame->document() : nullptr;
     // Fetch the document from the event target, because the target could be detached.
     if (Node* node = target->toNode())
-        document = node->inDocument() ? &node->document() : node->ownerDocument();
+        document = node->isConnected() ? &node->document() : node->ownerDocument();
     else if (DOMWindow* window = target->toDOMWindow())
         document = window->document();
 
index 329048b..9e8b71d 100644 (file)
@@ -117,7 +117,7 @@ void Scope::clearResolver()
 
 Scope& Scope::forNode(Node& node)
 {
-    ASSERT(node.inDocument());
+    ASSERT(node.isConnected());
     auto* shadowRoot = node.containingShadowRoot();
     if (shadowRoot)
         return shadowRoot->styleScope();
@@ -192,7 +192,7 @@ void Scope::removePendingSheet(RemovePendingSheetNotificationType notification)
 
 void Scope::addStyleSheetCandidateNode(Node& node, bool createdByParser)
 {
-    if (!node.inDocument())
+    if (!node.isConnected())
         return;
     
     // Until the <body> exists, we have no choice but to compare document positions,
index c59f53f..07ca9c3 100644 (file)
@@ -378,7 +378,7 @@ void TreeResolver::resolveComposedTree()
         auto& node = *it;
         auto& parent = this->parent();
 
-        ASSERT(node.inDocument());
+        ASSERT(node.isConnected());
         ASSERT(node.containingShadowRoot() == scope().shadowRoot);
         ASSERT(node.parentElement() == parent.element || is<ShadowRoot>(node.parentNode()) || node.parentElement()->shadowRoot());
 
index fb7d9a6..11ae7a9 100644 (file)
@@ -251,8 +251,8 @@ static inline void removeCSSPropertyFromTarget(SVGElement& targetElement, CSSPro
 
 static inline void applyCSSPropertyToTargetAndInstances(SVGElement& targetElement, const QualifiedName& attributeName, const String& valueAsString)
 {
-    // FIXME: Do we really need to check both inDocument and !parentNode?
-    if (attributeName == anyQName() || !targetElement.inDocument() || !targetElement.parentNode())
+    // FIXME: Do we really need to check both isConnected and !parentNode?
+    if (attributeName == anyQName() || !targetElement.isConnected() || !targetElement.parentNode())
         return;
 
     CSSPropertyID id = cssPropertyID(attributeName.localName());
@@ -267,8 +267,8 @@ static inline void applyCSSPropertyToTargetAndInstances(SVGElement& targetElemen
 
 static inline void removeCSSPropertyFromTargetAndInstances(SVGElement& targetElement, const QualifiedName& attributeName)
 {
-    // FIXME: Do we really need to check both inDocument and !parentNode?
-    if (attributeName == anyQName() || !targetElement.inDocument() || !targetElement.parentNode())
+    // FIXME: Do we really need to check both isConnected and !parentNode?
+    if (attributeName == anyQName() || !targetElement.isConnected() || !targetElement.parentNode())
         return;
 
     CSSPropertyID id = cssPropertyID(attributeName.localName());
@@ -289,7 +289,7 @@ static inline void notifyTargetAboutAnimValChange(SVGElement& targetElement, con
 
 static inline void notifyTargetAndInstancesAboutAnimValChange(SVGElement& targetElement, const QualifiedName& attributeName)
 {
-    if (attributeName == anyQName() || !targetElement.inDocument() || !targetElement.parentNode())
+    if (attributeName == anyQName() || !targetElement.isConnected() || !targetElement.parentNode())
         return;
 
     SVGElement::InstanceUpdateBlocker blocker(targetElement);
index 729d588..fdc10ef 100644 (file)
@@ -363,7 +363,7 @@ void SVGElement::reportAttributeParsingError(SVGParsingError error, const Qualif
 
 void SVGElement::removedFrom(ContainerNode& rootParent)
 {
-    bool wasInDocument = rootParent.inDocument();
+    bool wasInDocument = rootParent.isConnected();
     if (wasInDocument)
         updateRelativeLengthsInformation(false, this);
 
@@ -977,7 +977,7 @@ void SVGElement::svgAttributeChanged(const QualifiedName& attrName)
         // Notify resources about id changes, this is important as we cache resources by id in SVGDocumentExtensions
         if (is<RenderSVGResourceContainer>(renderer))
             downcast<RenderSVGResourceContainer>(*renderer).idChanged();
-        if (inDocument())
+        if (isConnected())
             buildPendingResourcesIfNeeded();
         invalidateInstances();
         return;
@@ -994,7 +994,7 @@ Node::InsertionNotificationRequest SVGElement::insertedInto(ContainerNode& rootP
 
 void SVGElement::buildPendingResourcesIfNeeded()
 {
-    if (!needsPendingResourceHandling() || !inDocument() || isInShadowTree())
+    if (!needsPendingResourceHandling() || !isConnected() || isInShadowTree())
         return;
 
     SVGDocumentExtensions& extensions = document().accessSVGExtensions();
@@ -1067,7 +1067,7 @@ AffineTransform SVGElement::localCoordinateSpaceTransform(SVGLocatable::CTMScope
 void SVGElement::updateRelativeLengthsInformation(bool hasRelativeLengths, SVGElement* element)
 {
     // If we're not yet in a document, this function will be called again from insertedInto(). Do nothing now.
-    if (!inDocument())
+    if (!isConnected())
         return;
 
     // An element wants to notify us that its own relative lengths state changed.
index 9f859a8..b0d38ec 100644 (file)
@@ -47,7 +47,7 @@ bool SVGExternalResourcesRequired::handleAttributeChange(SVGElement* targetEleme
     ASSERT(targetElement);
     if (!isKnownAttribute(attrName))
         return false;
-    if (!targetElement->inDocument())
+    if (!targetElement->isConnected())
         return true;
 
     // Handle dynamic updates of the 'externalResourcesRequired' attribute. Only possible case: changing from 'true' to 'false'
index c2cd6f6..19ef63b 100644 (file)
@@ -98,7 +98,7 @@ void SVGFEImageElement::requestImageResource()
 void SVGFEImageElement::buildPendingResource()
 {
     clearResourceReferences();
-    if (!inDocument())
+    if (!isConnected())
         return;
 
     String id;
@@ -164,13 +164,13 @@ void SVGFEImageElement::finishedInsertingSubtree()
 void SVGFEImageElement::removedFrom(ContainerNode& rootParent)
 {
     SVGFilterPrimitiveStandardAttributes::removedFrom(rootParent);
-    if (rootParent.inDocument())
+    if (rootParent.isConnected())
         clearResourceReferences();
 }
 
 void SVGFEImageElement::notifyFinished(CachedResource&)
 {
-    if (!inDocument())
+    if (!isConnected())
         return;
 
     Element* parent = parentElement();
index 6474b9a..4a93c7e 100644 (file)
@@ -227,7 +227,7 @@ SVGFontElement* SVGFontFaceElement::associatedFontElement() const
 
 void SVGFontFaceElement::rebuildFontFace()
 {
-    if (!inDocument()) {
+    if (!isConnected()) {
         ASSERT(!m_fontElement);
         return;
     }
@@ -273,7 +273,7 @@ void SVGFontFaceElement::rebuildFontFace()
 Node::InsertionNotificationRequest SVGFontFaceElement::insertedInto(ContainerNode& rootParent)
 {
     SVGElement::insertedInto(rootParent);
-    if (!rootParent.inDocument()) {
+    if (!rootParent.isConnected()) {
         ASSERT(!m_fontElement);
         return InsertionDone;
     }
@@ -287,7 +287,7 @@ void SVGFontFaceElement::removedFrom(ContainerNode& rootParent)
 {
     SVGElement::removedFrom(rootParent);
 
-    if (rootParent.inDocument()) {
+    if (rootParent.isConnected()) {
         m_fontElement = nullptr;
         document().accessSVGExtensions().unregisterSVGFontFaceElement(this);
         m_fontFaceRule->mutableProperties().clear();
index dcc8c68..b361b74 100644 (file)
@@ -192,7 +192,7 @@ void SVGImageElement::didAttachRenderers()
 Node::InsertionNotificationRequest SVGImageElement::insertedInto(ContainerNode& rootParent)
 {
     SVGGraphicsElement::insertedInto(rootParent);
-    if (!rootParent.inDocument())
+    if (!rootParent.isConnected())
         return InsertionDone;
     // Update image loader, as soon as we're living in the tree.
     // We can only resolve base URIs properly, after that!
index 55c0e68..ff7d487 100644 (file)
@@ -58,7 +58,7 @@ SVGMPathElement::~SVGMPathElement()
 void SVGMPathElement::buildPendingResource()
 {
     clearResourceReferences();
-    if (!inDocument())
+    if (!isConnected())
         return;
 
     String id;
@@ -89,7 +89,7 @@ void SVGMPathElement::clearResourceReferences()
 Node::InsertionNotificationRequest SVGMPathElement::insertedInto(ContainerNode& rootParent)
 {
     SVGElement::insertedInto(rootParent);
-    if (rootParent.inDocument())
+    if (rootParent.isConnected())
         return InsertionShouldCallFinishedInsertingSubtree;
     return InsertionDone;
 }
@@ -103,7 +103,7 @@ void SVGMPathElement::removedFrom(ContainerNode& rootParent)
 {
     SVGElement::removedFrom(rootParent);
     notifyParentOfPathChange(&rootParent);
-    if (rootParent.inDocument())
+    if (rootParent.isConnected())
         clearResourceReferences();
 }
 
index 0741297..1be7378 100644 (file)
@@ -168,7 +168,7 @@ Frame* SVGSVGElement::frameForCurrentScale() const
 {
     // The behavior of currentScale() is undefined when we're dealing with non-standalone SVG documents.
     // If the document is embedded, the scaling is handled by the host renderer.
-    if (!inDocument() || !isOutermostSVGSVGElement())
+    if (!isConnected() || !isOutermostSVGSVGElement())
         return nullptr;
     Frame* frame = document().frame();
     return frame && frame->isMainFrame() ? frame : nullptr;
@@ -466,7 +466,7 @@ RenderPtr<RenderElement> SVGSVGElement::createElementRenderer(RenderStyle&& styl
 
 Node::InsertionNotificationRequest SVGSVGElement::insertedInto(ContainerNode& rootParent)
 {
-    if (rootParent.inDocument()) {
+    if (rootParent.isConnected()) {
         document().accessSVGExtensions().addTimeContainer(this);
 
         // Animations are started at the end of document parsing and after firing the load event,
@@ -480,7 +480,7 @@ Node::InsertionNotificationRequest SVGSVGElement::insertedInto(ContainerNode& ro
 
 void SVGSVGElement::removedFrom(ContainerNode& rootParent)
 {
-    if (rootParent.inDocument())
+    if (rootParent.isConnected())
         document().accessSVGExtensions().removeTimeContainer(this);
     SVGGraphicsElement::removedFrom(rootParent);
 }
index 669adae..414c55c 100644 (file)
@@ -74,7 +74,7 @@ void SVGScriptElement::svgAttributeChanged(const QualifiedName& attrName)
 Node::InsertionNotificationRequest SVGScriptElement::insertedInto(ContainerNode& rootParent)
 {
     SVGElement::insertedInto(rootParent);
-    if (rootParent.inDocument())
+    if (rootParent.isConnected())
         SVGExternalResourcesRequired::insertedIntoDocument(this);
     return shouldCallFinishedInsertingSubtree(rootParent) ? InsertionShouldCallFinishedInsertingSubtree : InsertionDone;
 }
index 0a2e15f..8f8f9ef 100644 (file)
@@ -115,9 +115,9 @@ void SVGStyleElement::finishParsingChildren()
 
 Node::InsertionNotificationRequest SVGStyleElement::insertedInto(ContainerNode& rootParent)
 {
-    bool wasInDocument = inDocument();
+    bool wasInDocument = isConnected();
     auto result = SVGElement::insertedInto(rootParent);
-    if (rootParent.inDocument() && !wasInDocument)
+    if (rootParent.isConnected() && !wasInDocument)
         m_styleSheetOwner.insertedIntoDocument(*this);
     return result;
 }
@@ -125,7 +125,7 @@ Node::InsertionNotificationRequest SVGStyleElement::insertedInto(ContainerNode&
 void SVGStyleElement::removedFrom(ContainerNode& rootParent)
 {
     SVGElement::removedFrom(rootParent);
-    if (rootParent.inDocument() && !inDocument())
+    if (rootParent.isConnected() && !isConnected())
         m_styleSheetOwner.removedFromDocument(*this);
 }
 
index fbe7a61..a4ff46a 100644 (file)
@@ -89,7 +89,7 @@ void SVGTRefTargetEventListener::attach(RefPtr<Element>&& target)
 {
     ASSERT(!isAttached());
     ASSERT(target.get());
-    ASSERT(target->inDocument());
+    ASSERT(target->isConnected());
 
     target->addEventListener(eventNames().DOMSubtreeModifiedEvent, *this, false);
     target->addEventListener(eventNames().DOMNodeRemovedFromDocumentEvent, *this, false);
@@ -164,7 +164,7 @@ void SVGTRefElement::detachTarget()
     if (container)
         container->setTextContent(emptyContent);
 
-    if (!inDocument())
+    if (!isConnected())
         return;
 
     // Mark the referenced ID as pending.
@@ -229,7 +229,7 @@ void SVGTRefElement::buildPendingResource()
     m_targetListener->detach();
 
     // If we're not yet in a document, this function will be called again from insertedInto().
-    if (!inDocument())
+    if (!isConnected())
         return;
 
     String id;
@@ -256,7 +256,7 @@ void SVGTRefElement::buildPendingResource()
 Node::InsertionNotificationRequest SVGTRefElement::insertedInto(ContainerNode& rootParent)
 {
     SVGElement::insertedInto(rootParent);
-    if (rootParent.inDocument())
+    if (rootParent.isConnected())
         return InsertionShouldCallFinishedInsertingSubtree;
     return InsertionDone;
 }
@@ -269,7 +269,7 @@ void SVGTRefElement::finishedInsertingSubtree()
 void SVGTRefElement::removedFrom(ContainerNode& rootParent)
 {
     SVGElement::removedFrom(rootParent);
-    if (rootParent.inDocument())
+    if (rootParent.isConnected())
         m_targetListener->detach();
 }
 
index 975e6a1..e44c334 100644 (file)
@@ -191,7 +191,7 @@ bool SVGTests::handleAttributeChange(SVGElement* targetElement, const QualifiedN
     ASSERT(targetElement);
     if (!isKnownAttribute(attributeName))
         return false;
-    if (!targetElement->inDocument())
+    if (!targetElement->isConnected())
         return true;
     targetElement->invalidateStyleAndRenderersForSubtree();
     return true;
index 92f8223..3cd2b8e 100644 (file)
@@ -152,7 +152,7 @@ bool SVGTextPathElement::rendererIsNeeded(const RenderStyle& style)
 void SVGTextPathElement::buildPendingResource()
 {
     clearResourceReferences();
-    if (!inDocument())
+    if (!isConnected())
         return;
 
     String id;
@@ -187,7 +187,7 @@ void SVGTextPathElement::finishedInsertingSubtree()
 void SVGTextPathElement::removedFrom(ContainerNode& rootParent)
 {
     SVGTextContentElement::removedFrom(rootParent);
-    if (rootParent.inDocument())
+    if (rootParent.isConnected())
         clearResourceReferences();
 }
 
index a59f8e5..a43292c 100644 (file)
@@ -42,7 +42,7 @@ Ref<SVGTitleElement> SVGTitleElement::create(const QualifiedName& tagName, Docum
 Node::InsertionNotificationRequest SVGTitleElement::insertedInto(ContainerNode& rootParent)
 {
     SVGElement::insertedInto(rootParent);
-    if (!rootParent.inDocument())
+    if (!rootParent.isConnected())
         return InsertionDone;
 
     if (firstChild() && document().isSVGDocument())
@@ -53,7 +53,7 @@ Node::InsertionNotificationRequest SVGTitleElement::insertedInto(ContainerNode&
 void SVGTitleElement::removedFrom(ContainerNode& rootParent)
 {
     SVGElement::removedFrom(rootParent);
-    if (rootParent.inDocument() && document().isSVGDocument())
+    if (rootParent.isConnected() && document().isSVGDocument())
         document().titleElementRemoved(*this);
 }
 
index e6b4ef6..e1a8ef7 100644 (file)
@@ -105,7 +105,7 @@ void SVGUseElement::parseAttribute(const QualifiedName& name, const AtomicString
 Node::InsertionNotificationRequest SVGUseElement::insertedInto(ContainerNode& rootParent)
 {
     SVGGraphicsElement::insertedInto(rootParent);
-    if (inDocument()) {
+    if (isConnected()) {
         SVGExternalResourcesRequired::insertedIntoDocument(this);
         invalidateShadowTree();
         updateExternalDocument();
@@ -229,7 +229,7 @@ void SVGUseElement::updateShadowTree()
     // FIXME: It's expensive to re-clone the entire tree every time. We should find a more efficient way to handle this.
     clearShadowTree();
 
-    if (isInShadowTree() || !inDocument())
+    if (isInShadowTree() || !isConnected())
         return;
 
     String targetID;
@@ -329,7 +329,7 @@ static void removeDisallowedElementsFromSubtree(SVGElement& subtree)
     // This function is used only on elements in subtrees that are not yet in documents, so
     // mutation events are not a factor; there are no event listeners to handle those events.
     // Assert that it's not in a document to make sure callers are still using it this way.
-    ASSERT(!subtree.inDocument());
+    ASSERT(!subtree.isConnected());
 
     Vector<Element*> disallowedElements;
     auto descendants = descendantsOfType<Element>(subtree);
@@ -409,7 +409,7 @@ SVGElement* SVGUseElement::findTarget(String* targetID) const
         return nullptr;
     auto& target = downcast<SVGElement>(*targetCandidate);
 
-    if (!target.inDocument() || isDisallowedElement(target))
+    if (!target.isConnected() || isDisallowedElement(target))
         return nullptr;
 
     // Reject any target that has already been cloned to create one of the ancestors of this element,
@@ -553,7 +553,7 @@ void SVGUseElement::finishParsingChildren()
 void SVGUseElement::updateExternalDocument()
 {
     URL externalDocumentURL;
-    if (inDocument() && isExternalURIReference(href(), document())) {
+    if (isConnected() && isExternalURIReference(href(), document())) {
         externalDocumentURL = document().completeURL(href());
         if (!externalDocumentURL.hasFragmentIdentifier())
             externalDocumentURL = URL();
index 832ca0d..2551af6 100644 (file)
@@ -169,7 +169,7 @@ void SVGSMILElement::buildPendingResource()
 {
     clearResourceReferences();
 
-    if (!inDocument()) {
+    if (!isConnected()) {
         // Reset the target element if we are no longer in the document.
         setTargetElement(nullptr);
         return;
@@ -184,7 +184,7 @@ void SVGSMILElement::buildPendingResource()
         target = SVGURIReference::targetElementFromIRIString(href, document(), &id);
     SVGElement* svgTarget = is<SVGElement>(target) ? downcast<SVGElement>(target) : nullptr;
 
-    if (svgTarget && !svgTarget->inDocument())
+    if (svgTarget && !svgTarget->isConnected())
         svgTarget = nullptr;
 
     if (svgTarget != targetElement())
@@ -255,7 +255,7 @@ void SVGSMILElement::reset()
 Node::InsertionNotificationRequest SVGSMILElement::insertedInto(ContainerNode& rootParent)
 {
     SVGElement::insertedInto(rootParent);
-    if (!rootParent.inDocument())
+    if (!rootParent.isConnected())
         return InsertionDone;
 
     // Verify we are not in <use> instance tree.
@@ -290,7 +290,7 @@ void SVGSMILElement::finishedInsertingSubtree()
 
 void SVGSMILElement::removedFrom(ContainerNode& rootParent)
 {
-    if (rootParent.inDocument()) {
+    if (rootParent.isConnected()) {
         clearResourceReferences();
         disconnectConditions();
         setTargetElement(nullptr);
@@ -481,7 +481,7 @@ void SVGSMILElement::parseAttribute(const QualifiedName& name, const AtomicStrin
             parseBeginOrEnd(attributeWithoutSynchronization(SVGNames::endAttr), End);
         }
         parseBeginOrEnd(value.string(), Begin);
-        if (inDocument())
+        if (isConnected())
             connectConditions();
     } else if (name == SVGNames::endAttr) {
         if (!m_conditions.isEmpty()) {
@@ -490,7 +490,7 @@ void SVGSMILElement::parseAttribute(const QualifiedName& name, const AtomicStrin
             parseBeginOrEnd(attributeWithoutSynchronization(SVGNames::beginAttr), Begin);
         }
         parseBeginOrEnd(value.string(), End);
-        if (inDocument())
+        if (isConnected())
             connectConditions();
     } else if (name == SVGNames::onendAttr)
         setAttributeEventListener(eventNames().endEventEvent, name, value);
@@ -522,7 +522,7 @@ void SVGSMILElement::svgAttributeChanged(const QualifiedName& attrName)
     else if (attrName.matches(XLinkNames::hrefAttr)) {
         InstanceInvalidationGuard guard(*this);
         buildPendingResource();
-    } else if (inDocument()) {
+    } else if (isConnected()) {
         if (attrName == SVGNames::beginAttr)
             beginListChanged(elapsed());
         else if (attrName == SVGNames::endAttr)
index 0949c4d..d04bd62 100644 (file)
@@ -181,7 +181,7 @@ static Node* findRootNode(Node* node)
 {
     if (is<Attr>(*node))
         node = downcast<Attr>(*node).ownerElement();
-    if (node->inDocument())
+    if (node->isConnected())
         node = &node->document();
     else {
         while (Node* parent = node->parentNode())
index 29cd573..bce0f0e 100644 (file)
@@ -857,7 +857,7 @@ void XMLDocumentParser::endElementNs()
 
     // The element's parent may have already been removed from document.
     // Parsing continues in this case, but scripts aren't executed.
-    if (!element.inDocument()) {
+    if (!element.isConnected()) {
         popCurrentNode();
         return;
     }
index 7c129a8..ba74013 100644 (file)
@@ -1,5 +1,20 @@
 2017-02-02  Chris Dumez  <cdumez@apple.com>
 
+        Rename Node::inDocument() to isConnected()
+        https://bugs.webkit.org/show_bug.cgi?id=167743
+
+        Reviewed by Sam Weinig.
+
+        Rename Node::inDocument() to isConnected() to match the DOM specification more closely:
+        - https://dom.spec.whatwg.org/#connected
+
+        * DOM/DOMNode.mm:
+        (-[DOMNode isConnected]):
+        * WebView/WebFrame.mm:
+        (-[WebFrame selectNSRange:onElement:]):
+
+2017-02-02  Chris Dumez  <cdumez@apple.com>
+
         [Crash] com.apple.WebKit.WebContent at WebKit: WebKit::WebPage::fromCorePage()
         https://bugs.webkit.org/show_bug.cgi?id=167738
         <rdar://problem/30229990>
index 871c9e9..ec130f4 100644 (file)
@@ -199,7 +199,7 @@ DOMNode *kit(Node* value)
 - (BOOL)isConnected
 {
     JSMainThreadNullState state;
-    return unwrap(*self).inDocument();
+    return unwrap(*self).isConnected();
 }
 
 - (DOMElement *)parentElement
index d50367c..66c944c 100644 (file)
@@ -1594,9 +1594,9 @@ static WebFrameLoadType toWebFrameLoadType(FrameLoadType frameLoadType)
         return;
 
     Node* node = core(element);
-    if (!node->inDocument())
+    if (!node->isConnected())
         return;
-        
+
     frame->selection().selectRangeOnElement(range.location, range.length, *node);
 }