Index: third_party/WebKit/Source/core/editing/EditingUtilities.cpp |
diff --git a/third_party/WebKit/Source/core/editing/EditingUtilities.cpp b/third_party/WebKit/Source/core/editing/EditingUtilities.cpp |
index 0edfc242c3b68c9fd5c55eebd9b7bc16ca7322e5..86e85babb1b7b10265937480abf450234adc213d 100644 |
--- a/third_party/WebKit/Source/core/editing/EditingUtilities.cpp |
+++ b/third_party/WebKit/Source/core/editing/EditingUtilities.cpp |
@@ -1468,6 +1468,26 @@ unsigned numEnclosingMailBlockquotes(const Position& p) |
return num; |
} |
+PositionWithAffinity positionRespectingEditingBoundary(const Position& position, const LayoutPoint& localPoint, Node* targetNode) |
+{ |
+ if (!targetNode->layoutObject()) |
+ return PositionWithAffinity(); |
+ |
+ LayoutPoint selectionEndPoint = localPoint; |
+ Element* editableElement = rootEditableElementOf(position); |
+ |
+ if (editableElement && !editableElement->contains(targetNode)) { |
+ if (!editableElement->layoutObject()) |
+ return PositionWithAffinity(); |
+ |
+ FloatPoint absolutePoint = targetNode->layoutObject()->localToAbsolute(FloatPoint(selectionEndPoint)); |
+ selectionEndPoint = roundedLayoutPoint(editableElement->layoutObject()->absoluteToLocal(absolutePoint)); |
+ targetNode = editableElement; |
+ } |
+ |
+ return targetNode->layoutObject()->positionForPoint(selectionEndPoint); |
+} |
+ |
void updatePositionForNodeRemoval(Position& position, Node& node) |
{ |
if (position.isNull()) |