Commit 404ec376 authored by Xiaocheng Hu's avatar Xiaocheng Hu Committed by Commit Bot

Stop using VisiblePosition in FrameSelection::SelectWordAroundCaret

This patch changes FrameSelection::SelectWordAroundCaret to use
VisiblePosition-free versions of word boundary algorithms to reduce
usage of VisiblePosition.

Bug: 657237
Change-Id: I1605f77a86332fa20caa7966454fbf1307c10cea
Reviewed-on: https://chromium-review.googlesource.com/c/1330752
Commit-Queue: Xiaocheng Hu <xiaochengh@chromium.org>
Reviewed-by: default avatarYoichi Osato <yoichio@chromium.org>
Reviewed-by: default avatarYoshifumi Inoue <yosin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#608089}
parent 7488f368
......@@ -1085,28 +1085,29 @@ bool FrameSelection::SelectWordAroundCaret() {
// http://crbug.com/657237 for more details.
if (!selection.IsCaret())
return false;
const VisiblePosition& position = selection.VisibleStart();
const Position position = selection.Start();
static const EWordSide kWordSideList[2] = {kNextWordIfOnBoundary,
kPreviousWordIfOnBoundary};
for (EWordSide word_side : kWordSideList) {
// TODO(yoichio): We should have Position version of |start/endOfWord|
// for avoiding unnecessary canonicalization.
VisiblePosition start = StartOfWord(position, word_side);
VisiblePosition end = EndOfWord(position, word_side);
Position start = StartOfWordPosition(position, word_side);
Position end = EndOfWordPosition(position, word_side);
// TODO(editing-dev): |StartOfWord()| and |EndOfWord()| should not make null
// for non-null parameter.
// See http://crbug.com/872443
if (start.DeepEquivalent().IsNull() || end.DeepEquivalent().IsNull())
if (start.IsNull() || end.IsNull())
continue;
String text =
PlainText(EphemeralRange(start.DeepEquivalent(), end.DeepEquivalent()));
if (start > end) {
// Since word boundaries are computed on flat tree, they can be reversed
// when mapped back to DOM.
std::swap(start, end);
}
String text = PlainText(EphemeralRange(start, end));
if (!text.IsEmpty() && !IsSeparator(text.CharacterStartingAt(0))) {
SetSelection(SelectionInDOMTree::Builder()
.Collapse(start.ToPositionWithAffinity())
.Extend(end.DeepEquivalent())
.Build(),
SetSelection(
SelectionInDOMTree::Builder().Collapse(start).Extend(end).Build(),
SetSelectionOptions::Builder()
.SetShouldCloseTyping(true)
.SetShouldClearTypingStyle(true)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment