Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(215)

Unified Diff: third_party/WebKit/Source/core/editing/VisibleUnits.cpp

Issue 2720593005: Make PositionIterator to skip contents of INPUT/SELECT/TEXTAREA (Closed)
Patch Set: 2017-03-02T19:03:48 Add FrameSelectionTest.SelectAllWithInputElement Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 2afc55ab57045cf8db7bf340c963840737fafd63..e30020c5655e9465a8001d1633be1171bf879f62 100644
--- a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
+++ b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
@@ -2874,6 +2874,18 @@ static bool isStreamer(const PositionIteratorAlgorithm<Strategy>& pos) {
}
template <typename Strategy>
+static PositionTemplate<Strategy> adjustPositionForBackwardIteration(
+ const PositionTemplate<Strategy>& position) {
+ DCHECK(!position.isNull());
+ if (!position.isAfterAnchor())
+ return position;
+ if (isUserSelectContain(*position.anchorNode()))
+ return position.toOffsetInAnchor();
+ return PositionTemplate<Strategy>::editingPositionOf(
+ position.anchorNode(), Strategy::caretMaxOffset(*position.anchorNode()));
+}
+
+template <typename Strategy>
static PositionTemplate<Strategy> mostBackwardCaretPosition(
const PositionTemplate<Strategy>& position,
EditingBoundaryCrossingRule rule) {
@@ -2888,11 +2900,7 @@ static PositionTemplate<Strategy> mostBackwardCaretPosition(
Node* boundary = enclosingVisualBoundary<Strategy>(startNode);
// FIXME: PositionIterator should respect Before and After positions.
PositionIteratorAlgorithm<Strategy> lastVisible(
- position.isAfterAnchor()
- ? PositionTemplate<Strategy>::editingPositionOf(
- position.anchorNode(),
- Strategy::caretMaxOffset(*position.anchorNode()))
- : position);
+ adjustPositionForBackwardIteration<Strategy>(position));
PositionIteratorAlgorithm<Strategy> currentPos = lastVisible;
bool startEditable = hasEditableStyle(*startNode);
Node* lastNode = startNode;

Powered by Google App Engine
This is Rietveld 408576698