Index: third_party/WebKit/Source/core/input/EventHandlingUtil.cpp |
diff --git a/third_party/WebKit/Source/core/input/EventHandlingUtil.cpp b/third_party/WebKit/Source/core/input/EventHandlingUtil.cpp |
index 2a3fcca5797449ef880fa23c24d7a9b3043de31c..908de11084e01bf8a44b9de6c32cb8ae855d5339 100644 |
--- a/third_party/WebKit/Source/core/input/EventHandlingUtil.cpp |
+++ b/third_party/WebKit/Source/core/input/EventHandlingUtil.cpp |
@@ -5,7 +5,10 @@ |
#include "core/input/EventHandlingUtil.h" |
#include "core/frame/FrameView.h" |
+#include "core/frame/LocalFrame.h" |
#include "core/layout/api/LayoutViewItem.h" |
+#include "core/paint/PaintLayer.h" |
+#include "platform/scroll/ScrollableArea.h" |
namespace blink { |
namespace EventHandlingUtil { |
@@ -63,5 +66,57 @@ WebInputEventResult toWebInputEventResult(DispatchEventResult result) { |
} |
} |
+PaintLayer* layerForNode(Node* node) { |
+ if (!node) |
+ return nullptr; |
+ |
+ LayoutObject* layoutObject = node->layoutObject(); |
+ if (!layoutObject) |
+ return nullptr; |
+ |
+ PaintLayer* layer = layoutObject->enclosingLayer(); |
+ if (!layer) |
+ return nullptr; |
+ |
+ return layer; |
+} |
+ |
+ScrollableArea* associatedScrollableArea(const PaintLayer* layer) { |
+ if (PaintLayerScrollableArea* scrollableArea = layer->getScrollableArea()) { |
+ if (scrollableArea->scrollsOverflow()) |
+ return scrollableArea; |
+ } |
+ |
+ return nullptr; |
+} |
+ |
+ContainerNode* parentForClickEvent(const Node& node) { |
+ // IE doesn't dispatch click events for mousedown/mouseup events across form |
+ // controls. |
+ if (node.isHTMLElement() && toHTMLElement(node).isInteractiveContent()) |
+ return nullptr; |
+ |
+ return FlatTreeTraversal::parent(node); |
+} |
+ |
+LayoutPoint contentPointFromRootFrame(LocalFrame* frame, |
+ const IntPoint& pointInRootFrame) { |
+ FrameView* view = frame->view(); |
+ // FIXME: Is it really OK to use the wrong coordinates here when view is 0? |
+ // Historically the code would just crash; this is clearly no worse than that. |
+ return view ? view->rootFrameToContents(pointInRootFrame) : pointInRootFrame; |
+} |
+ |
+MouseEventWithHitTestResults performMouseEventHitTest( |
+ LocalFrame* frame, |
+ const HitTestRequest& request, |
+ const PlatformMouseEvent& mev) { |
+ DCHECK(frame); |
+ DCHECK(frame->document()); |
+ |
+ return frame->document()->performMouseEventHitTest( |
+ request, contentPointFromRootFrame(frame, mev.position()), mev); |
+} |
+ |
} // namespace EventHandlingUtil |
} // namespace blink |