Index: Source/core/dom/Document.cpp |
diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp |
index 00883785ffa13afb5b864778ee5558083aa1d89f..8ad02b33d13bdfeddf25e0c77fb5b6989da30ba6 100644 |
--- a/Source/core/dom/Document.cpp |
+++ b/Source/core/dom/Document.cpp |
@@ -89,6 +89,7 @@ |
#include "core/dom/NodeFilter.h" |
#include "core/dom/NodeIterator.h" |
#include "core/dom/NodeRareData.h" |
+#include "core/dom/NodeRenderingTraversal.h" |
#include "core/dom/NodeTraversal.h" |
#include "core/dom/NodeWithIndex.h" |
#include "core/dom/PageTransitionEvent.h" |
@@ -3110,24 +3111,33 @@ void Document::removeFocusedNodeOfSubtree(Node* node, bool amongChildrenOnly) |
void Document::hoveredNodeDetached(Node* node) |
{ |
- if (!m_hoverNode || (node != m_hoverNode && (!m_hoverNode->isTextNode() || node != m_hoverNode->parentNode()))) |
+ if (!m_hoverNode) |
return; |
- m_hoverNode = node->parentNode(); |
+ NodeRenderingTraversal::ParentDetails details; |
+ if (node != m_hoverNode && (!m_hoverNode->isTextNode() || node != NodeRenderingTraversal::parent(m_hoverNode.get(), &details))) |
+ return; |
+ |
+ m_hoverNode = NodeRenderingTraversal::parent(node, &details); |
hayato
2013/06/05 01:47:43
It's optional, but we could use 'for' loop here ra
tasak
2013/06/07 09:55:36
Done.
|
while (m_hoverNode && !m_hoverNode->renderer()) |
- m_hoverNode = m_hoverNode->parentNode(); |
+ m_hoverNode = NodeRenderingTraversal::parent(m_hoverNode.get(), &details); |
if (frame()) |
frame()->eventHandler()->scheduleHoverStateUpdate(); |
} |
void Document::activeChainNodeDetached(Node* node) |
{ |
- if (!m_activeElement || (node != m_activeElement && (!m_activeElement->isTextNode() || node != m_activeElement->parentNode()))) |
+ if (!m_activeElement) |
+ return; |
+ |
+ NodeRenderingTraversal::ParentDetails details; |
+ if (node != m_activeElement && (!m_activeElement->isTextNode() || node != NodeRenderingTraversal::parent(m_activeElement.get(), &details))) |
return; |
- m_activeElement = node->parentElement(); |
- while (m_activeElement && !m_activeElement->renderer()) |
- m_activeElement = m_activeElement->parentElement(); |
+ Node* activeNode = NodeRenderingTraversal::parent(node, &details); |
+ while (activeNode && activeNode->isElementNode() && !activeNode->renderer()) |
+ activeNode = NodeRenderingTraversal::parent(activeNode, &details); |
+ m_activeElement = activeNode && activeNode->isElementNode() ? toElement(activeNode) : 0; |
} |
const Vector<AnnotatedRegionValue>& Document::annotatedRegions() const |