Index: Source/core/dom/Document.cpp |
diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp |
index 4b97db5687594905c5098d97a830f72460741aa7..94e84d94c93e431356005c9028a5c35ed7d5c638 100644 |
--- a/Source/core/dom/Document.cpp |
+++ b/Source/core/dom/Document.cpp |
@@ -5441,13 +5441,12 @@ void Document::updateHoverActiveState(const HitTestRequest& request, Element* in |
Element* oldActiveElement = activeHoverElement(); |
if (oldActiveElement && !request.active()) { |
- // We are clearing the :active chain because the mouse has been released. |
- for (RenderObject* curr = oldActiveElement->renderer(); curr; curr = curr->parent()) { |
- if (curr->node()) { |
- ASSERT(!curr->node()->isTextNode()); |
spartha
2014/06/26 19:01:36
@morrita, the assert was added in one of your patc
|
- curr->node()->setActive(false); |
- m_userActionElements.setInActiveChain(curr->node(), false); |
- } |
+ // The oldActiveElement renderer is null, dropped on :active by setting display: none, |
+ // for instance. We still need to clear the ActiveChain as the mouse is released. |
+ for (Node* node = oldActiveElement; node; node = NodeRenderingTraversal::parent(node)) { |
+ ASSERT(node->isTextNode()); |
+ node->setActive(false); |
+ m_userActionElements.setInActiveChain(node, false); |
} |
setActiveHoverElement(nullptr); |
} else { |
@@ -5455,11 +5454,10 @@ void Document::updateHoverActiveState(const HitTestRequest& request, Element* in |
if (!oldActiveElement && newActiveElement && !newActiveElement->isDisabledFormControl() && request.active() && !request.touchMove()) { |
// We are setting the :active chain and freezing it. If future moves happen, they |
// will need to reference this chain. |
- for (RenderObject* curr = newActiveElement->renderer(); curr; curr = curr->parent()) { |
- if (curr->node() && !curr->isText()) |
- m_userActionElements.setInActiveChain(curr->node(), true); |
+ for (Node* node = newActiveElement; node; node = NodeRenderingTraversal::parent(node)) { |
+ if (!node->isTextNode()) |
+ m_userActionElements.setInActiveChain(node, true); |
} |
- |
setActiveHoverElement(newActiveElement); |
} |
} |