Index: Source/core/page/EventHandler.cpp |
diff --git a/Source/core/page/EventHandler.cpp b/Source/core/page/EventHandler.cpp |
index ae1dcb2150812c2a1eface03dedbfde39b38abfd..50a51f94bf4ade870b39447e668e3cfbb93c11df 100644 |
--- a/Source/core/page/EventHandler.cpp |
+++ b/Source/core/page/EventHandler.cpp |
@@ -1612,6 +1612,15 @@ void EventHandler::invalidateClick() |
m_clickNode = 0; |
} |
+static Node* parentForClickEvent(const Node& node) |
+{ |
+ // IE doesn't dispatch click events for mousedown/mouseup events across form |
+ // controls. |
+ if (node.isHTMLElement() && toHTMLElement(node).isInteractiveContent()) |
+ return 0; |
+ return node.parentOrShadowHostNode(); |
+} |
+ |
bool EventHandler::handleMouseReleaseEvent(const PlatformMouseEvent& mouseEvent) |
{ |
RefPtr<FrameView> protector(m_frame->view()); |
@@ -1676,7 +1685,7 @@ bool EventHandler::handleMouseReleaseEvent(const PlatformMouseEvent& mouseEvent) |
bool swallowClickEvent = false; |
if (m_clickCount > 0 && !contextMenuEvent && mev.targetNode() && m_clickNode) { |
- if (Node* clickTargetNode = mev.targetNode()->commonAncestorOverShadowBoundary(*m_clickNode)) |
+ if (Node* clickTargetNode = mev.targetNode()->commonAncestor(*m_clickNode, parentForClickEvent)) |
swallowClickEvent = !dispatchMouseEvent(EventTypeNames::click, clickTargetNode, true, m_clickCount, mouseEvent, true); |
} |