Chromium Code Reviews| 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); |
| } |
| } |