Chromium Code Reviews| 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 |