Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(729)

Unified Diff: Source/core/dom/Document.cpp

Issue 15932012: HitTestResult::innerElement should check its parent node for rendering and styling. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/dom/Document.cpp
diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp
index 7e12401650fc32917e5ee27423367b9407152290..5e5483fb721e83c74eb72d6958b564389de1a711 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"
@@ -3107,12 +3108,14 @@ 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();
- while (m_hoverNode && !m_hoverNode->renderer())
- m_hoverNode = m_hoverNode->parentNode();
+ NodeRenderingTraversal::ParentDetails details;
+ if (node != m_hoverNode && (!m_hoverNode->isTextNode() || node != NodeRenderingTraversal::parent(m_hoverNode.get(), &details)))
+ return;
+
+ for (m_hoverNode = NodeRenderingTraversal::parent(node, &details); m_hoverNode && !m_hoverNode->renderer(); m_hoverNode = NodeRenderingTraversal::parent(m_hoverNode.get(), &details)) { }
// If the mouse cursor is not visible, do not clear existing
// hover effects on the ancestors of |node| and do not invoke
@@ -3126,12 +3129,17 @@ void Document::hoveredNodeDetached(Node* node)
void Document::activeChainNodeDetached(Node* node)
{
- if (!m_activeElement || (node != m_activeElement && (!m_activeElement->isTextNode() || node != m_activeElement->parentNode())))
+ if (!m_activeElement)
return;
- m_activeElement = node->parentElement();
- while (m_activeElement && !m_activeElement->renderer())
- m_activeElement = m_activeElement->parentElement();
+ NodeRenderingTraversal::ParentDetails details;
+ if (node != m_activeElement && (!m_activeElement->isTextNode() || node != NodeRenderingTraversal::parent(m_activeElement.get(), &details)))
+ return;
+
+ Node* activeNode = NodeRenderingTraversal::parent(node, &details);
+ for (; activeNode && activeNode->isElementNode() && !activeNode->renderer(); activeNode = NodeRenderingTraversal::parent(activeNode, &details)) { }
+
+ m_activeElement = activeNode && activeNode->isElementNode() ? toElement(activeNode) : 0;
}
const Vector<AnnotatedRegionValue>& Document::annotatedRegions() const
« no previous file with comments | « LayoutTests/fast/dom/shadow/hover-active-drag-distributed-nodes-expected.txt ('k') | Source/core/rendering/HitTestResult.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698