Index: third_party/WebKit/Source/core/editing/FrameSelection.cpp |
diff --git a/third_party/WebKit/Source/core/editing/FrameSelection.cpp b/third_party/WebKit/Source/core/editing/FrameSelection.cpp |
index de34916614b35d263230620fbca35d9e65f60208..496f98e4071a672aa46c549dd010e4a3d72de395 100644 |
--- a/third_party/WebKit/Source/core/editing/FrameSelection.cpp |
+++ b/third_party/WebKit/Source/core/editing/FrameSelection.cpp |
@@ -1075,15 +1075,26 @@ void FrameSelection::scheduleVisualUpdateForPaintInvalidationIfNeeded() const { |
frameView->scheduleVisualUpdateForPaintInvalidationIfNeeded(); |
} |
+static bool hasNonSeparatorCharacter(const String& text) { |
+ for (unsigned i = 0; i < text.length(); i++) { |
+ if (!isSeparator(text.characterStartingAt(i))) |
+ return true; |
+ } |
+ return false; |
+} |
+ |
bool FrameSelection::selectWordAroundPosition(const VisiblePosition& position) { |
static const EWordSide wordSideList[2] = {RightWordIfOnBoundary, |
LeftWordIfOnBoundary}; |
for (EWordSide wordSide : wordSideList) { |
+ // TODO(yoichio): We should have Position version of |start/endOfWord| |
+ // for avoiding unnecessary canonicalization. |
+ // Then we don't need |hasNonSeparatorCharacter|. |
VisiblePosition start = startOfWord(position, wordSide); |
VisiblePosition end = endOfWord(position, wordSide); |
String text = |
plainText(EphemeralRange(start.deepEquivalent(), end.deepEquivalent())); |
- if (!text.isEmpty() && !isSeparator(text.characterStartingAt(0))) { |
+ if (!text.isEmpty() && hasNonSeparatorCharacter(text)) { |
setSelection(SelectionInDOMTree::Builder() |
.collapse(start.toPositionWithAffinity()) |
.extend(end.deepEquivalent()) |