Chromium Code Reviews| 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..2278da2eb2736c733a396895403ed8d7c4566be6 100644 |
| --- a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
| +++ b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
| @@ -2559,14 +2559,31 @@ template <typename Strategy> |
| LayoutRect localSelectionRectOfPositionTemplate( |
| const PositionWithAffinityTemplate<Strategy>& position, |
| LayoutObject*& layoutObject) { |
| - LayoutRect rect = localCaretRectOfPositionTemplate(position, layoutObject); |
| + if (position.isNull()) { |
| + layoutObject = nullptr; |
| + return LayoutRect(); |
| + } |
| + Node* node = position.anchorNode(); |
| - if (rect.isEmpty()) |
| - return rect; |
| + layoutObject = node->layoutObject(); |
| + if (!layoutObject) |
| + return LayoutRect(); |
| InlineBoxPosition boxPosition = |
| computeInlineBoxPosition(position.position(), position.affinity()); |
| + if (!boxPosition.inlineBox) |
| + return LayoutRect(); |
| + |
| + layoutObject = LineLayoutAPIShim::layoutObjectFrom( |
| + boxPosition.inlineBox->getLineLayoutItem()); |
| + |
| + LayoutRect rect = layoutObject->localCaretRect(boxPosition.inlineBox, |
| + boxPosition.offsetInBox); |
| + |
| + if (rect.isEmpty()) |
|
joone
2017/01/20 02:07:29
If boxPosition.inlineBox isn't InlineTextBox, loca
yosin_UTC9
2017/01/20 04:28:29
We need to have a test case of this. I think BR or
|
| + return rect; |
| + |
| InlineTextBox* box = toInlineTextBox(boxPosition.inlineBox); |
|
yosin_UTC9
2017/01/20 04:28:29
We need to handle if |boxPosition.inlineBox| isn't
|
| if (layoutObject->style()->isHorizontalWritingMode()) { |
| rect.setY(box->root().selectionTop()); |