Index: third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
diff --git a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
index 7551fa9aca421a97db3626f5ab5ffe45be2a8c94..6c84cce709433b1d60cfd067351462a395797e76 100644 |
--- a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
+++ b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
@@ -2559,15 +2559,31 @@ template <typename Strategy> |
LayoutRect localSelectionRectOfPositionTemplate( |
const PositionWithAffinityTemplate<Strategy>& position, |
LayoutObject*& layoutObject) { |
- LayoutRect rect = localCaretRectOfPositionTemplate(position, layoutObject); |
- |
- if (rect.isEmpty()) |
- return rect; |
+ if (position.isNull()) { |
+ layoutObject = nullptr; |
+ return LayoutRect(); |
+ } |
+ Node* node = position.anchorNode(); |
+ layoutObject = node->layoutObject(); |
+ if (!layoutObject) |
+ return LayoutRect(); |
InlineBoxPosition boxPosition = |
computeInlineBoxPosition(position.position(), position.affinity()); |
- InlineTextBox* box = toInlineTextBox(boxPosition.inlineBox); |
+ if (!boxPosition.inlineBox) |
+ return LayoutRect(); |
+ |
+ layoutObject = LineLayoutAPIShim::layoutObjectFrom( |
+ boxPosition.inlineBox->getLineLayoutItem()); |
+ |
+ LayoutRect rect = layoutObject->localCaretRect(boxPosition.inlineBox, |
+ boxPosition.offsetInBox); |
+ |
+ if (rect.isEmpty()) |
+ return rect; |
+ |
+ InlineBox* const box = boxPosition.inlineBox; |
if (layoutObject->style()->isHorizontalWritingMode()) { |
rect.setY(box->root().selectionTop()); |
rect.setHeight(box->root().selectionHeight()); |