Chromium Code Reviews| Index: third_party/WebKit/Source/core/editing/SelectionController.cpp | 
| diff --git a/third_party/WebKit/Source/core/editing/SelectionController.cpp b/third_party/WebKit/Source/core/editing/SelectionController.cpp | 
| index e26e1732d57ef92bb4111b2507ed4856c894f2d5..4f8b2ef6e8517b44d1ffc971859d5321d0880353 100644 | 
| --- a/third_party/WebKit/Source/core/editing/SelectionController.cpp | 
| +++ b/third_party/WebKit/Source/core/editing/SelectionController.cpp | 
| @@ -295,23 +295,32 @@ void SelectionController::selectClosestWordFromHitTestResult(const HitTestResult | 
| if (!innerNode || !innerNode->layoutObject()) | 
| return; | 
| - const VisiblePositionInFlatTree& pos = visiblePositionOfHitTestResult(result); | 
| + // Special-case image local offset to always be zero, to avoid triggering | 
| + // LayoutReplaced::positionFromPoint's advancement of the position at the | 
| + // mid-point of the the image (which was intended for mouse-drag selection | 
| + // and isn't desirable for long-press). | 
| + HitTestResult adjustedHitTestResult = result; | 
| + if (result.image()) { | 
| 
 
yosin_UTC9
2016/04/05 05:16:45
nit: we don't need to have "{}" here, since then-c
 
aelias_OOO_until_Jul13
2016/04/05 06:48:36
Done.
 
 | 
| + adjustedHitTestResult.setNodeAndPosition(result.innerNode(), LayoutPoint(0, 0)); | 
| + } | 
| + | 
| + const VisiblePositionInFlatTree& pos = visiblePositionOfHitTestResult(adjustedHitTestResult); | 
| if (pos.isNotNull()) { | 
| newSelection = VisibleSelectionInFlatTree(pos); | 
| newSelection.expandUsingGranularity(WordGranularity); | 
| } | 
| -#if OS(ANDROID) | 
| - // If node doesn't have text except space, tab or line break, do not | 
| - // select that 'empty' area. | 
| - EphemeralRangeInFlatTree range = EphemeralRangeInFlatTree(newSelection.start(), newSelection.end()); | 
| - const String& str = plainText(range, TextIteratorDefaultBehavior); | 
| - if (str.isEmpty() || str.simplifyWhiteSpace().containsOnlyWhitespace()) | 
| - return; | 
| -#endif | 
| - | 
| - if (appendTrailingWhitespace == AppendTrailingWhitespace::ShouldAppend && newSelection.isRange()) | 
| - newSelection.appendTrailingWhitespace(); | 
| + if (appendTrailingWhitespace == AppendTrailingWhitespace::DontAppend) { | 
| + // If node doesn't have text except space, tab or line break, do not | 
| + // select that 'empty' area. | 
| + EphemeralRangeInFlatTree range = EphemeralRangeInFlatTree(newSelection.start(), newSelection.end()); | 
| 
 
yosin_UTC9
2016/04/05 05:16:45
nit: |const EphmeralRangeInFlatTree&| to avoid unn
 
aelias_OOO_until_Jul13
2016/04/05 06:48:36
Switched to parens-on-local-variable-constructor s
 
 | 
| + const String& str = plainText(range, TextIteratorEmitsObjectReplacementCharacter); | 
| + if (str.simplifyWhiteSpace().isEmpty()) | 
| + return; | 
| + } else { | 
| 
 
yosin_UTC9
2016/04/05 05:16:45
To avoid nesting, we can write:
} else if (newSel
 
aelias_OOO_until_Jul13
2016/04/05 06:48:36
Switched this back to the former syntax anyway.
 
 | 
| + if (newSelection.isRange()) | 
| + newSelection.appendTrailingWhitespace(); | 
| + } | 
| updateSelectionForMouseDownDispatchingSelectStart(innerNode, expandSelectionToRespectUserSelectAll(innerNode, newSelection), WordGranularity); | 
| } | 
| @@ -540,11 +549,7 @@ bool SelectionController::handleGestureLongPress(const PlatformGestureEvent& ges | 
| return false; | 
| Node* innerNode = hitTestResult.innerNode(); | 
| -#if OS(ANDROID) | 
| bool innerNodeIsSelectable = innerNode && (innerNode->isContentEditable() || innerNode->isTextNode() || innerNode->canStartSelection()); | 
| -#else | 
| - bool innerNodeIsSelectable = innerNode && (innerNode->isContentEditable() || innerNode->isTextNode()); | 
| -#endif | 
| if (!innerNodeIsSelectable) | 
| return false; |