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

Side by Side Diff: third_party/WebKit/Source/core/editing/VisibleUnits.cpp

Issue 2341053002: Mark the createVisiblePosition overloads as deprecated (Closed)
Patch Set: minor revision Created 4 years, 3 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed. 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 return PositionWithAffinityTemplate<Strategy>(); 194 return PositionWithAffinityTemplate<Strategy>();
195 195
196 // Return the last position before |pos| that is in the same editable region 196 // Return the last position before |pos| that is in the same editable region
197 // as this position 197 // as this position
198 return lastEditablePositionBeforePositionInRoot(pos.position(), *highestRoot ); 198 return lastEditablePositionBeforePositionInRoot(pos.position(), *highestRoot );
199 } 199 }
200 200
201 template <typename Strategy> 201 template <typename Strategy>
202 static VisiblePositionTemplate<Strategy> honorEditingBoundaryAtOrBefore(const Vi siblePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor) 202 static VisiblePositionTemplate<Strategy> honorEditingBoundaryAtOrBefore(const Vi siblePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor)
203 { 203 {
204 return createVisiblePosition(honorEditingBoundaryAtOrBefore(pos.toPositionWi thAffinity(), anchor)); 204 return createVisiblePositionDeprecated(honorEditingBoundaryAtOrBefore(pos.to PositionWithAffinity(), anchor));
205 } 205 }
206 206
207 template <typename Strategy> 207 template <typename Strategy>
208 static VisiblePositionTemplate<Strategy> honorEditingBoundaryAtOrAfter(const Vis iblePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor) 208 static VisiblePositionTemplate<Strategy> honorEditingBoundaryAtOrAfter(const Vis iblePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor)
209 { 209 {
210 if (pos.isNull()) 210 if (pos.isNull())
211 return pos; 211 return pos;
212 212
213 ContainerNode* highestRoot = highestEditableRoot(anchor); 213 ContainerNode* highestRoot = highestEditableRoot(anchor);
214 214
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 } 309 }
310 return 0; 310 return 0;
311 } 311 }
312 312
313 // FIXME: consolidate with code in previousLinePosition. 313 // FIXME: consolidate with code in previousLinePosition.
314 static Position previousRootInlineBoxCandidatePosition(Node* node, const Visible Position& visiblePosition, EditableType editableType) 314 static Position previousRootInlineBoxCandidatePosition(Node* node, const Visible Position& visiblePosition, EditableType editableType)
315 { 315 {
316 ContainerNode* highestRoot = highestEditableRoot(visiblePosition.deepEquival ent(), editableType); 316 ContainerNode* highestRoot = highestEditableRoot(visiblePosition.deepEquival ent(), editableType);
317 Node* previousNode = previousLeafWithSameEditability(node, editableType); 317 Node* previousNode = previousLeafWithSameEditability(node, editableType);
318 318
319 while (previousNode && (!previousNode->layoutObject() || inSameLine(createVi siblePosition(firstPositionInOrBeforeNode(previousNode)), visiblePosition))) 319 while (previousNode && (!previousNode->layoutObject() || inSameLine(createVi siblePositionDeprecated(firstPositionInOrBeforeNode(previousNode)), visiblePosit ion)))
320 previousNode = previousLeafWithSameEditability(previousNode, editableTyp e); 320 previousNode = previousLeafWithSameEditability(previousNode, editableTyp e);
321 321
322 while (previousNode && !previousNode->isShadowRoot()) { 322 while (previousNode && !previousNode->isShadowRoot()) {
323 if (highestEditableRoot(firstPositionInOrBeforeNode(previousNode), edita bleType) != highestRoot) 323 if (highestEditableRoot(firstPositionInOrBeforeNode(previousNode), edita bleType) != highestRoot)
324 break; 324 break;
325 325
326 Position pos = isHTMLBRElement(*previousNode) ? Position::beforeNode(pre viousNode) : 326 Position pos = isHTMLBRElement(*previousNode) ? Position::beforeNode(pre viousNode) :
327 Position::editingPositionOf(previousNode, caretMaxOffset(previousNod e)); 327 Position::editingPositionOf(previousNode, caretMaxOffset(previousNod e));
328 328
329 if (isVisuallyEquivalentCandidate(pos)) 329 if (isVisuallyEquivalentCandidate(pos))
330 return pos; 330 return pos;
331 331
332 previousNode = previousLeafWithSameEditability(previousNode, editableTyp e); 332 previousNode = previousLeafWithSameEditability(previousNode, editableTyp e);
333 } 333 }
334 return Position(); 334 return Position();
335 } 335 }
336 336
337 static Position nextRootInlineBoxCandidatePosition(Node* node, const VisiblePosi tion& visiblePosition, EditableType editableType) 337 static Position nextRootInlineBoxCandidatePosition(Node* node, const VisiblePosi tion& visiblePosition, EditableType editableType)
338 { 338 {
339 ContainerNode* highestRoot = highestEditableRoot(visiblePosition.deepEquival ent(), editableType); 339 ContainerNode* highestRoot = highestEditableRoot(visiblePosition.deepEquival ent(), editableType);
340 Node* nextNode = nextLeafWithSameEditability(node, editableType); 340 Node* nextNode = nextLeafWithSameEditability(node, editableType);
341 while (nextNode && (!nextNode->layoutObject() || inSameLine(createVisiblePos ition(firstPositionInOrBeforeNode(nextNode)), visiblePosition))) 341 while (nextNode && (!nextNode->layoutObject() || inSameLine(createVisiblePos itionDeprecated(firstPositionInOrBeforeNode(nextNode)), visiblePosition)))
342 nextNode = nextLeafWithSameEditability(nextNode, ContentIsEditable); 342 nextNode = nextLeafWithSameEditability(nextNode, ContentIsEditable);
343 343
344 while (nextNode && !nextNode->isShadowRoot()) { 344 while (nextNode && !nextNode->isShadowRoot()) {
345 if (highestEditableRoot(firstPositionInOrBeforeNode(nextNode), editableT ype) != highestRoot) 345 if (highestEditableRoot(firstPositionInOrBeforeNode(nextNode), editableT ype) != highestRoot)
346 break; 346 break;
347 347
348 Position pos; 348 Position pos;
349 pos = Position::editingPositionOf(nextNode, caretMinOffset(nextNode)); 349 pos = Position::editingPositionOf(nextNode, caretMinOffset(nextNode));
350 350
351 if (isVisuallyEquivalentCandidate(pos)) 351 if (isVisuallyEquivalentCandidate(pos))
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
764 if (needMoreContext) { 764 if (needMoreContext) {
765 // The last search returned the beginning of the buffer and asked for 765 // The last search returned the beginning of the buffer and asked for
766 // more context, but there is no earlier text. Force a search with 766 // more context, but there is no earlier text. Force a search with
767 // what's available. 767 // what's available.
768 // TODO(xiaochengh): Do we have to search the whole string? 768 // TODO(xiaochengh): Do we have to search the whole string?
769 next = searchFunction(string.data(), string.size(), string.size() - suff ixLength, DontHaveMoreContext, needMoreContext); 769 next = searchFunction(string.data(), string.size(), string.size() - suff ixLength, DontHaveMoreContext, needMoreContext);
770 DCHECK(!needMoreContext); 770 DCHECK(!needMoreContext);
771 } 771 }
772 772
773 if (!next) 773 if (!next)
774 return createVisiblePosition(it.atEnd() ? it.startPosition() : pos); 774 return createVisiblePositionDeprecated(it.atEnd() ? it.startPosition() : pos);
775 775
776 Node* node = it.startContainer(); 776 Node* node = it.startContainer();
777 int boundaryOffset = remainingLength + next; 777 int boundaryOffset = remainingLength + next;
778 if (node->isTextNode() && boundaryOffset <= node->maxCharacterOffset()) { 778 if (node->isTextNode() && boundaryOffset <= node->maxCharacterOffset()) {
779 // The next variable contains a usable index into a text node 779 // The next variable contains a usable index into a text node
780 return createVisiblePosition(PositionTemplate<Strategy>(node, boundaryOf fset)); 780 return createVisiblePositionDeprecated(PositionTemplate<Strategy>(node, boundaryOffset));
781 } 781 }
782 782
783 // Use the character iterator to translate the next value into a DOM 783 // Use the character iterator to translate the next value into a DOM
784 // position. 784 // position.
785 BackwardsCharacterIteratorAlgorithm<Strategy> charIt(start, end); 785 BackwardsCharacterIteratorAlgorithm<Strategy> charIt(start, end);
786 charIt.advance(string.size() - suffixLength - next); 786 charIt.advance(string.size() - suffixLength - next);
787 // TODO(yosin) charIt can get out of shadow host. 787 // TODO(yosin) charIt can get out of shadow host.
788 return createVisiblePosition(charIt.endPosition()); 788 return createVisiblePositionDeprecated(charIt.endPosition());
789 } 789 }
790 790
791 template <typename Strategy> 791 template <typename Strategy>
792 static VisiblePositionTemplate<Strategy> nextBoundary(const VisiblePositionTempl ate<Strategy>& c, BoundarySearchFunction searchFunction) 792 static VisiblePositionTemplate<Strategy> nextBoundary(const VisiblePositionTempl ate<Strategy>& c, BoundarySearchFunction searchFunction)
793 { 793 {
794 PositionTemplate<Strategy> pos = c.deepEquivalent(); 794 PositionTemplate<Strategy> pos = c.deepEquivalent();
795 Node* boundary = parentEditingBoundary(pos); 795 Node* boundary = parentEditingBoundary(pos);
796 if (!boundary) 796 if (!boundary)
797 return VisiblePositionTemplate<Strategy>(); 797 return VisiblePositionTemplate<Strategy>();
798 798
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
866 // Use the character iterator to translate the next value into a DOM 866 // Use the character iterator to translate the next value into a DOM
867 // position. 867 // position.
868 CharacterIteratorAlgorithm<Strategy> charIt(searchStart, searchEnd, Text IteratorEmitsCharactersBetweenAllVisiblePositions); 868 CharacterIteratorAlgorithm<Strategy> charIt(searchStart, searchEnd, Text IteratorEmitsCharactersBetweenAllVisiblePositions);
869 charIt.advance(next - prefixLength - 1); 869 charIt.advance(next - prefixLength - 1);
870 pos = charIt.endPosition(); 870 pos = charIt.endPosition();
871 871
872 if (charIt.characterAt(0) == '\n') { 872 if (charIt.characterAt(0) == '\n') {
873 // TODO(yosin) workaround for collapsed range (where only start 873 // TODO(yosin) workaround for collapsed range (where only start
874 // position is correct) emitted for some emitted newlines 874 // position is correct) emitted for some emitted newlines
875 // (see rdar://5192593) 875 // (see rdar://5192593)
876 const VisiblePositionTemplate<Strategy> visPos = createVisiblePositi on(pos); 876 const VisiblePositionTemplate<Strategy> visPos = createVisiblePositi onDeprecated(pos);
877 if (visPos.deepEquivalent() == createVisiblePosition(charIt.startPos ition()).deepEquivalent()) { 877 if (visPos.deepEquivalent() == createVisiblePositionDeprecated(charI t.startPosition()).deepEquivalent()) {
878 charIt.advance(1); 878 charIt.advance(1);
879 pos = charIt.startPosition(); 879 pos = charIt.startPosition();
880 } 880 }
881 } 881 }
882 } 882 }
883 883
884 // generate VisiblePosition, use TextAffinity::Upstream affinity if possible 884 // generate VisiblePosition, use TextAffinity::Upstream affinity if possible
885 return createVisiblePosition(pos, VP_UPSTREAM_IF_POSSIBLE); 885 return createVisiblePositionDeprecated(pos, VP_UPSTREAM_IF_POSSIBLE);
886 } 886 }
887 887
888 // --------- 888 // ---------
889 889
890 static unsigned startWordBoundary(const UChar* characters, unsigned length, unsi gned offset, BoundarySearchContextAvailability mayHaveMoreContext, bool& needMor eContext) 890 static unsigned startWordBoundary(const UChar* characters, unsigned length, unsi gned offset, BoundarySearchContextAvailability mayHaveMoreContext, bool& needMor eContext)
891 { 891 {
892 TRACE_EVENT0("blink", "startWordBoundary"); 892 TRACE_EVENT0("blink", "startWordBoundary");
893 DCHECK(offset); 893 DCHECK(offset);
894 if (mayHaveMoreContext && !startOfLastWordBoundaryContext(characters, offset )) { 894 if (mayHaveMoreContext && !startOfLastWordBoundaryContext(characters, offset )) {
895 needMoreContext = true; 895 needMoreContext = true;
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
1061 } 1061 }
1062 1062
1063 static PositionInFlatTreeWithAffinity startOfLine(const PositionInFlatTreeWithAf finity& currentPosition) 1063 static PositionInFlatTreeWithAffinity startOfLine(const PositionInFlatTreeWithAf finity& currentPosition)
1064 { 1064 {
1065 return startOfLineAlgorithm<EditingInFlatTreeStrategy>(currentPosition); 1065 return startOfLineAlgorithm<EditingInFlatTreeStrategy>(currentPosition);
1066 } 1066 }
1067 1067
1068 // FIXME: Rename this function to reflect the fact it ignores bidi levels. 1068 // FIXME: Rename this function to reflect the fact it ignores bidi levels.
1069 VisiblePosition startOfLine(const VisiblePosition& currentPosition) 1069 VisiblePosition startOfLine(const VisiblePosition& currentPosition)
1070 { 1070 {
1071 return createVisiblePosition(startOfLine(currentPosition.toPositionWithAffin ity())); 1071 return createVisiblePositionDeprecated(startOfLine(currentPosition.toPositio nWithAffinity()));
1072 } 1072 }
1073 1073
1074 VisiblePositionInFlatTree startOfLine(const VisiblePositionInFlatTree& currentPo sition) 1074 VisiblePositionInFlatTree startOfLine(const VisiblePositionInFlatTree& currentPo sition)
1075 { 1075 {
1076 return createVisiblePosition(startOfLine(currentPosition.toPositionWithAffin ity())); 1076 return createVisiblePositionDeprecated(startOfLine(currentPosition.toPositio nWithAffinity()));
1077 } 1077 }
1078 1078
1079 template <typename Strategy> 1079 template <typename Strategy>
1080 static PositionWithAffinityTemplate<Strategy> logicalStartOfLineAlgorithm(const PositionWithAffinityTemplate<Strategy>& c) 1080 static PositionWithAffinityTemplate<Strategy> logicalStartOfLineAlgorithm(const PositionWithAffinityTemplate<Strategy>& c)
1081 { 1081 {
1082 // TODO: this is the current behavior that might need to be fixed. 1082 // TODO: this is the current behavior that might need to be fixed.
1083 // Please refer to https://bugs.webkit.org/show_bug.cgi?id=49107 for detail. 1083 // Please refer to https://bugs.webkit.org/show_bug.cgi?id=49107 for detail.
1084 PositionWithAffinityTemplate<Strategy> visPos = startPositionForLine(c, UseL ogicalOrdering); 1084 PositionWithAffinityTemplate<Strategy> visPos = startPositionForLine(c, UseL ogicalOrdering);
1085 1085
1086 if (ContainerNode* editableRoot = highestEditableRoot(c.position())) { 1086 if (ContainerNode* editableRoot = highestEditableRoot(c.position())) {
1087 if (!editableRoot->contains(visPos.position().computeContainerNode())) 1087 if (!editableRoot->contains(visPos.position().computeContainerNode()))
1088 return PositionWithAffinityTemplate<Strategy>(PositionTemplate<Strat egy>::firstPositionInNode(editableRoot)); 1088 return PositionWithAffinityTemplate<Strategy>(PositionTemplate<Strat egy>::firstPositionInNode(editableRoot));
1089 } 1089 }
1090 1090
1091 return honorEditingBoundaryAtOrBefore(visPos, c.position()); 1091 return honorEditingBoundaryAtOrBefore(visPos, c.position());
1092 } 1092 }
1093 1093
1094 VisiblePosition logicalStartOfLine(const VisiblePosition& currentPosition) 1094 VisiblePosition logicalStartOfLine(const VisiblePosition& currentPosition)
1095 { 1095 {
1096 return createVisiblePosition(logicalStartOfLineAlgorithm<EditingStrategy>(cu rrentPosition.toPositionWithAffinity())); 1096 return createVisiblePositionDeprecated(logicalStartOfLineAlgorithm<EditingSt rategy>(currentPosition.toPositionWithAffinity()));
1097 } 1097 }
1098 1098
1099 VisiblePositionInFlatTree logicalStartOfLine(const VisiblePositionInFlatTree& cu rrentPosition) 1099 VisiblePositionInFlatTree logicalStartOfLine(const VisiblePositionInFlatTree& cu rrentPosition)
1100 { 1100 {
1101 return createVisiblePosition(logicalStartOfLineAlgorithm<EditingInFlatTreeSt rategy>(currentPosition.toPositionWithAffinity())); 1101 return createVisiblePositionDeprecated(logicalStartOfLineAlgorithm<EditingIn FlatTreeStrategy>(currentPosition.toPositionWithAffinity()));
1102 } 1102 }
1103 1103
1104 template <typename Strategy> 1104 template <typename Strategy>
1105 static VisiblePositionTemplate<Strategy> endPositionForLine(const VisiblePositio nTemplate<Strategy>& c, LineEndpointComputationMode mode) 1105 static VisiblePositionTemplate<Strategy> endPositionForLine(const VisiblePositio nTemplate<Strategy>& c, LineEndpointComputationMode mode)
1106 { 1106 {
1107 if (c.isNull()) 1107 if (c.isNull())
1108 return VisiblePositionTemplate<Strategy>(); 1108 return VisiblePositionTemplate<Strategy>();
1109 1109
1110 RootInlineBox* rootBox = RenderedPosition(c).rootBox(); 1110 RootInlineBox* rootBox = RenderedPosition(c).rootBox();
1111 if (!rootBox) { 1111 if (!rootBox) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1146 } else if (endBox->isInlineTextBox() && endNode->isTextNode()) { 1146 } else if (endBox->isInlineTextBox() && endNode->isTextNode()) {
1147 InlineTextBox* endTextBox = toInlineTextBox(endBox); 1147 InlineTextBox* endTextBox = toInlineTextBox(endBox);
1148 int endOffset = endTextBox->start(); 1148 int endOffset = endTextBox->start();
1149 if (!endTextBox->isLineBreak()) 1149 if (!endTextBox->isLineBreak())
1150 endOffset += endTextBox->len(); 1150 endOffset += endTextBox->len();
1151 pos = PositionTemplate<Strategy>(toText(endNode), endOffset); 1151 pos = PositionTemplate<Strategy>(toText(endNode), endOffset);
1152 } else { 1152 } else {
1153 pos = PositionTemplate<Strategy>::afterNode(endNode); 1153 pos = PositionTemplate<Strategy>::afterNode(endNode);
1154 } 1154 }
1155 1155
1156 return createVisiblePosition(pos, VP_UPSTREAM_IF_POSSIBLE); 1156 return createVisiblePositionDeprecated(pos, VP_UPSTREAM_IF_POSSIBLE);
1157 } 1157 }
1158 1158
1159 // TODO(yosin) Rename this function to reflect the fact it ignores bidi levels. 1159 // TODO(yosin) Rename this function to reflect the fact it ignores bidi levels.
1160 template <typename Strategy> 1160 template <typename Strategy>
1161 static VisiblePositionTemplate<Strategy> endOfLineAlgorithm(const VisiblePositio nTemplate<Strategy>& currentPosition) 1161 static VisiblePositionTemplate<Strategy> endOfLineAlgorithm(const VisiblePositio nTemplate<Strategy>& currentPosition)
1162 { 1162 {
1163 // TODO(yosin) this is the current behavior that might need to be fixed. 1163 // TODO(yosin) this is the current behavior that might need to be fixed.
1164 // Please refer to https://bugs.webkit.org/show_bug.cgi?id=49107 for detail. 1164 // Please refer to https://bugs.webkit.org/show_bug.cgi?id=49107 for detail.
1165 VisiblePositionTemplate<Strategy> visPos = endPositionForLine(currentPositio n, UseInlineBoxOrdering); 1165 VisiblePositionTemplate<Strategy> visPos = endPositionForLine(currentPositio n, UseInlineBoxOrdering);
1166 1166
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1212 // next line. For example, 1212 // next line. For example,
1213 // <div contenteditable dir="rtl" style="line-break:before-white-space">xyz 1213 // <div contenteditable dir="rtl" style="line-break:before-white-space">xyz
1214 // a xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz </div> 1214 // a xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz </div>
1215 // In this case, use the previous position of the computed logical end 1215 // In this case, use the previous position of the computed logical end
1216 // position. 1216 // position.
1217 if (!inSameLogicalLine(currentPosition, visPos)) 1217 if (!inSameLogicalLine(currentPosition, visPos))
1218 visPos = previousPositionOf(visPos); 1218 visPos = previousPositionOf(visPos);
1219 1219
1220 if (ContainerNode* editableRoot = highestEditableRoot(currentPosition.deepEq uivalent())) { 1220 if (ContainerNode* editableRoot = highestEditableRoot(currentPosition.deepEq uivalent())) {
1221 if (!editableRoot->contains(visPos.deepEquivalent().computeContainerNode ())) 1221 if (!editableRoot->contains(visPos.deepEquivalent().computeContainerNode ()))
1222 return createVisiblePosition(PositionTemplate<Strategy>::lastPositio nInNode(editableRoot)); 1222 return createVisiblePositionDeprecated(PositionTemplate<Strategy>::l astPositionInNode(editableRoot));
1223 } 1223 }
1224 1224
1225 return honorEditingBoundaryAtOrAfter(visPos, currentPosition.deepEquivalent( )); 1225 return honorEditingBoundaryAtOrAfter(visPos, currentPosition.deepEquivalent( ));
1226 } 1226 }
1227 1227
1228 VisiblePosition logicalEndOfLine(const VisiblePosition& currentPosition) 1228 VisiblePosition logicalEndOfLine(const VisiblePosition& currentPosition)
1229 { 1229 {
1230 return logicalEndOfLineAlgorithm<EditingStrategy>(currentPosition); 1230 return logicalEndOfLineAlgorithm<EditingStrategy>(currentPosition);
1231 } 1231 }
1232 1232
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1355 root = box->root().prevRootBox(); 1355 root = box->root().prevRootBox();
1356 // We want to skip zero height boxes. 1356 // We want to skip zero height boxes.
1357 // This could happen in case it is a TrailingFloatsRootInlineBox. 1357 // This could happen in case it is a TrailingFloatsRootInlineBox.
1358 if (!root || !root->logicalHeight() || !root->firstLeafChild()) 1358 if (!root || !root->logicalHeight() || !root->firstLeafChild())
1359 root = 0; 1359 root = 0;
1360 } 1360 }
1361 1361
1362 if (!root) { 1362 if (!root) {
1363 Position position = previousRootInlineBoxCandidatePosition(node, visible Position, editableType); 1363 Position position = previousRootInlineBoxCandidatePosition(node, visible Position, editableType);
1364 if (position.isNotNull()) { 1364 if (position.isNotNull()) {
1365 RenderedPosition renderedPosition((createVisiblePosition(position))) ; 1365 RenderedPosition renderedPosition((createVisiblePositionDeprecated(p osition)));
1366 root = renderedPosition.rootBox(); 1366 root = renderedPosition.rootBox();
1367 if (!root) 1367 if (!root)
1368 return createVisiblePosition(position); 1368 return createVisiblePositionDeprecated(position);
1369 } 1369 }
1370 } 1370 }
1371 1371
1372 if (root) { 1372 if (root) {
1373 // FIXME: Can be wrong for multi-column layout and with transforms. 1373 // FIXME: Can be wrong for multi-column layout and with transforms.
1374 LayoutPoint pointInLine = absoluteLineDirectionPointToLocalPointInBlock( root, lineDirectionPoint); 1374 LayoutPoint pointInLine = absoluteLineDirectionPointToLocalPointInBlock( root, lineDirectionPoint);
1375 LineLayoutItem lineLayoutItem = root->closestLeafChildForPoint(pointInLi ne, isEditablePosition(p))->getLineLayoutItem(); 1375 LineLayoutItem lineLayoutItem = root->closestLeafChildForPoint(pointInLi ne, isEditablePosition(p))->getLineLayoutItem();
1376 Node* node = lineLayoutItem.node(); 1376 Node* node = lineLayoutItem.node();
1377 if (node && editingIgnoresContent(node)) 1377 if (node && editingIgnoresContent(node))
1378 return VisiblePosition::inParentBeforeNode(*node); 1378 return VisiblePosition::inParentBeforeNode(*node);
1379 return createVisiblePosition(lineLayoutItem.positionForPoint(pointInLine )); 1379 return createVisiblePositionDeprecated(lineLayoutItem.positionForPoint(p ointInLine));
1380 } 1380 }
1381 1381
1382 // Could not find a previous line. This means we must already be on the firs t line. 1382 // Could not find a previous line. This means we must already be on the firs t line.
1383 // Move to the start of the content in this block, which effectively moves u s 1383 // Move to the start of the content in this block, which effectively moves u s
1384 // to the start of the line we're on. 1384 // to the start of the line we're on.
1385 Element* rootElement = hasEditableStyle(*node, editableType) ? rootEditableE lement(*node, editableType) : node->document().documentElement(); 1385 Element* rootElement = hasEditableStyle(*node, editableType) ? rootEditableE lement(*node, editableType) : node->document().documentElement();
1386 if (!rootElement) 1386 if (!rootElement)
1387 return VisiblePosition(); 1387 return VisiblePosition();
1388 return VisiblePosition::firstPositionInNode(rootElement); 1388 return VisiblePosition::firstPositionInNode(rootElement);
1389 } 1389 }
(...skipping 21 matching lines...) Expand all
1411 if (!root || !root->logicalHeight() || !root->firstLeafChild()) 1411 if (!root || !root->logicalHeight() || !root->firstLeafChild())
1412 root = 0; 1412 root = 0;
1413 } 1413 }
1414 1414
1415 if (!root) { 1415 if (!root) {
1416 // FIXME: We need do the same in previousLinePosition. 1416 // FIXME: We need do the same in previousLinePosition.
1417 Node* child = NodeTraversal::childAt(*node, p.computeEditingOffset()); 1417 Node* child = NodeTraversal::childAt(*node, p.computeEditingOffset());
1418 node = child ? child : &NodeTraversal::lastWithinOrSelf(*node); 1418 node = child ? child : &NodeTraversal::lastWithinOrSelf(*node);
1419 Position position = nextRootInlineBoxCandidatePosition(node, visiblePosi tion, editableType); 1419 Position position = nextRootInlineBoxCandidatePosition(node, visiblePosi tion, editableType);
1420 if (position.isNotNull()) { 1420 if (position.isNotNull()) {
1421 RenderedPosition renderedPosition((createVisiblePosition(position))) ; 1421 RenderedPosition renderedPosition((createVisiblePositionDeprecated(p osition)));
1422 root = renderedPosition.rootBox(); 1422 root = renderedPosition.rootBox();
1423 if (!root) 1423 if (!root)
1424 return createVisiblePosition(position); 1424 return createVisiblePositionDeprecated(position);
1425 } 1425 }
1426 } 1426 }
1427 1427
1428 if (root) { 1428 if (root) {
1429 // FIXME: Can be wrong for multi-column layout and with transforms. 1429 // FIXME: Can be wrong for multi-column layout and with transforms.
1430 LayoutPoint pointInLine = absoluteLineDirectionPointToLocalPointInBlock( root, lineDirectionPoint); 1430 LayoutPoint pointInLine = absoluteLineDirectionPointToLocalPointInBlock( root, lineDirectionPoint);
1431 LineLayoutItem lineLayoutItem = root->closestLeafChildForPoint(pointInLi ne, isEditablePosition(p))->getLineLayoutItem(); 1431 LineLayoutItem lineLayoutItem = root->closestLeafChildForPoint(pointInLi ne, isEditablePosition(p))->getLineLayoutItem();
1432 Node* node = lineLayoutItem.node(); 1432 Node* node = lineLayoutItem.node();
1433 if (node && editingIgnoresContent(node)) 1433 if (node && editingIgnoresContent(node))
1434 return VisiblePosition::inParentBeforeNode(*node); 1434 return VisiblePosition::inParentBeforeNode(*node);
1435 return createVisiblePosition(lineLayoutItem.positionForPoint(pointInLine )); 1435 return createVisiblePositionDeprecated(lineLayoutItem.positionForPoint(p ointInLine));
1436 } 1436 }
1437 1437
1438 // Could not find a next line. This means we must already be on the last lin e. 1438 // Could not find a next line. This means we must already be on the last lin e.
1439 // Move to the end of the content in this block, which effectively moves us 1439 // Move to the end of the content in this block, which effectively moves us
1440 // to the end of the line we're on. 1440 // to the end of the line we're on.
1441 Element* rootElement = hasEditableStyle(*node, editableType) ? rootEditableE lement(*node, editableType) : node->document().documentElement(); 1441 Element* rootElement = hasEditableStyle(*node, editableType) ? rootEditableE lement(*node, editableType) : node->document().documentElement();
1442 if (!rootElement) 1442 if (!rootElement)
1443 return VisiblePosition(); 1443 return VisiblePosition();
1444 return VisiblePosition::lastPositionInNode(rootElement); 1444 return VisiblePosition::lastPositionInNode(rootElement);
1445 } 1445 }
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
1592 1592
1593 if (candidateType == PositionAnchorType::OffsetInAnchor) 1593 if (candidateType == PositionAnchorType::OffsetInAnchor)
1594 return PositionTemplate<Strategy>(candidateNode, candidateOffset); 1594 return PositionTemplate<Strategy>(candidateNode, candidateOffset);
1595 1595
1596 return PositionTemplate<Strategy>(candidateNode, candidateType); 1596 return PositionTemplate<Strategy>(candidateNode, candidateType);
1597 } 1597 }
1598 1598
1599 template <typename Strategy> 1599 template <typename Strategy>
1600 VisiblePositionTemplate<Strategy> startOfParagraphAlgorithm(const VisiblePositio nTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule boundaryCrossi ngRule) 1600 VisiblePositionTemplate<Strategy> startOfParagraphAlgorithm(const VisiblePositio nTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule boundaryCrossi ngRule)
1601 { 1601 {
1602 return createVisiblePosition(startOfParagraphAlgorithm(visiblePosition.deepE quivalent(), boundaryCrossingRule)); 1602 return createVisiblePositionDeprecated(startOfParagraphAlgorithm(visiblePosi tion.deepEquivalent(), boundaryCrossingRule));
1603 } 1603 }
1604 1604
1605 VisiblePosition startOfParagraph(const VisiblePosition& c, EditingBoundaryCrossi ngRule boundaryCrossingRule) 1605 VisiblePosition startOfParagraph(const VisiblePosition& c, EditingBoundaryCrossi ngRule boundaryCrossingRule)
1606 { 1606 {
1607 return startOfParagraphAlgorithm<EditingStrategy>(c, boundaryCrossingRule); 1607 return startOfParagraphAlgorithm<EditingStrategy>(c, boundaryCrossingRule);
1608 } 1608 }
1609 1609
1610 VisiblePositionInFlatTree startOfParagraph(const VisiblePositionInFlatTree& c, E ditingBoundaryCrossingRule boundaryCrossingRule) 1610 VisiblePositionInFlatTree startOfParagraph(const VisiblePositionInFlatTree& c, E ditingBoundaryCrossingRule boundaryCrossingRule)
1611 { 1611 {
1612 return startOfParagraphAlgorithm<EditingInFlatTreeStrategy>(c, boundaryCross ingRule); 1612 return startOfParagraphAlgorithm<EditingInFlatTreeStrategy>(c, boundaryCross ingRule);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1683 1683
1684 if (candidateType == PositionAnchorType::OffsetInAnchor) 1684 if (candidateType == PositionAnchorType::OffsetInAnchor)
1685 return PositionTemplate<Strategy>(candidateNode, candidateOffset); 1685 return PositionTemplate<Strategy>(candidateNode, candidateOffset);
1686 1686
1687 return PositionTemplate<Strategy>(candidateNode, candidateType); 1687 return PositionTemplate<Strategy>(candidateNode, candidateType);
1688 } 1688 }
1689 1689
1690 template <typename Strategy> 1690 template <typename Strategy>
1691 static VisiblePositionTemplate<Strategy> endOfParagraphAlgorithm(const VisiblePo sitionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule boundaryC rossingRule) 1691 static VisiblePositionTemplate<Strategy> endOfParagraphAlgorithm(const VisiblePo sitionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule boundaryC rossingRule)
1692 { 1692 {
1693 return createVisiblePosition(endOfParagraphAlgorithm(visiblePosition.deepEqu ivalent(), boundaryCrossingRule)); 1693 return createVisiblePositionDeprecated(endOfParagraphAlgorithm(visiblePositi on.deepEquivalent(), boundaryCrossingRule));
1694 } 1694 }
1695 1695
1696 VisiblePosition endOfParagraph(const VisiblePosition& c, EditingBoundaryCrossing Rule boundaryCrossingRule) 1696 VisiblePosition endOfParagraph(const VisiblePosition& c, EditingBoundaryCrossing Rule boundaryCrossingRule)
1697 { 1697 {
1698 return endOfParagraphAlgorithm<EditingStrategy>(c, boundaryCrossingRule); 1698 return endOfParagraphAlgorithm<EditingStrategy>(c, boundaryCrossingRule);
1699 } 1699 }
1700 1700
1701 VisiblePositionInFlatTree endOfParagraph(const VisiblePositionInFlatTree& c, Edi tingBoundaryCrossingRule boundaryCrossingRule) 1701 VisiblePositionInFlatTree endOfParagraph(const VisiblePositionInFlatTree& c, Edi tingBoundaryCrossingRule boundaryCrossingRule)
1702 { 1702 {
1703 return endOfParagraphAlgorithm<EditingInFlatTreeStrategy>(c, boundaryCrossin gRule); 1703 return endOfParagraphAlgorithm<EditingInFlatTreeStrategy>(c, boundaryCrossin gRule);
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
1809 1809
1810 // --------- 1810 // ---------
1811 1811
1812 template <typename Strategy> 1812 template <typename Strategy>
1813 static VisiblePositionTemplate<Strategy> startOfDocumentAlgorithm(const VisibleP ositionTemplate<Strategy>& visiblePosition) 1813 static VisiblePositionTemplate<Strategy> startOfDocumentAlgorithm(const VisibleP ositionTemplate<Strategy>& visiblePosition)
1814 { 1814 {
1815 Node* node = visiblePosition.deepEquivalent().anchorNode(); 1815 Node* node = visiblePosition.deepEquivalent().anchorNode();
1816 if (!node || !node->document().documentElement()) 1816 if (!node || !node->document().documentElement())
1817 return VisiblePositionTemplate<Strategy>(); 1817 return VisiblePositionTemplate<Strategy>();
1818 1818
1819 return createVisiblePosition(PositionTemplate<Strategy>::firstPositionInNode (node->document().documentElement())); 1819 return createVisiblePositionDeprecated(PositionTemplate<Strategy>::firstPosi tionInNode(node->document().documentElement()));
1820 } 1820 }
1821 1821
1822 VisiblePosition startOfDocument(const VisiblePosition& c) 1822 VisiblePosition startOfDocument(const VisiblePosition& c)
1823 { 1823 {
1824 return startOfDocumentAlgorithm<EditingStrategy>(c); 1824 return startOfDocumentAlgorithm<EditingStrategy>(c);
1825 } 1825 }
1826 1826
1827 VisiblePositionInFlatTree startOfDocument(const VisiblePositionInFlatTree& c) 1827 VisiblePositionInFlatTree startOfDocument(const VisiblePositionInFlatTree& c)
1828 { 1828 {
1829 return startOfDocumentAlgorithm<EditingInFlatTreeStrategy>(c); 1829 return startOfDocumentAlgorithm<EditingInFlatTreeStrategy>(c);
1830 } 1830 }
1831 1831
1832 template <typename Strategy> 1832 template <typename Strategy>
1833 static VisiblePositionTemplate<Strategy> endOfDocumentAlgorithm(const VisiblePos itionTemplate<Strategy>& visiblePosition) 1833 static VisiblePositionTemplate<Strategy> endOfDocumentAlgorithm(const VisiblePos itionTemplate<Strategy>& visiblePosition)
1834 { 1834 {
1835 Node* node = visiblePosition.deepEquivalent().anchorNode(); 1835 Node* node = visiblePosition.deepEquivalent().anchorNode();
1836 if (!node || !node->document().documentElement()) 1836 if (!node || !node->document().documentElement())
1837 return VisiblePositionTemplate<Strategy>(); 1837 return VisiblePositionTemplate<Strategy>();
1838 1838
1839 Element* doc = node->document().documentElement(); 1839 Element* doc = node->document().documentElement();
1840 return createVisiblePosition(PositionTemplate<Strategy>::lastPositionInNode( doc)); 1840 return createVisiblePositionDeprecated(PositionTemplate<Strategy>::lastPosit ionInNode(doc));
1841 } 1841 }
1842 1842
1843 VisiblePosition endOfDocument(const VisiblePosition& c) 1843 VisiblePosition endOfDocument(const VisiblePosition& c)
1844 { 1844 {
1845 return endOfDocumentAlgorithm<EditingStrategy>(c); 1845 return endOfDocumentAlgorithm<EditingStrategy>(c);
1846 } 1846 }
1847 1847
1848 VisiblePositionInFlatTree endOfDocument(const VisiblePositionInFlatTree& c) 1848 VisiblePositionInFlatTree endOfDocument(const VisiblePositionInFlatTree& c)
1849 { 1849 {
1850 return endOfDocumentAlgorithm<EditingInFlatTreeStrategy>(c); 1850 return endOfDocumentAlgorithm<EditingInFlatTreeStrategy>(c);
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
2238 return false; 2238 return false;
2239 } 2239 }
2240 2240
2241 VisiblePosition visiblePositionForContentsPoint(const IntPoint& contentsPoint, L ocalFrame* frame) 2241 VisiblePosition visiblePositionForContentsPoint(const IntPoint& contentsPoint, L ocalFrame* frame)
2242 { 2242 {
2243 HitTestRequest request = HitTestRequest::Move | HitTestRequest::ReadOnly | H itTestRequest::Active | HitTestRequest::IgnoreClipping; 2243 HitTestRequest request = HitTestRequest::Move | HitTestRequest::ReadOnly | H itTestRequest::Active | HitTestRequest::IgnoreClipping;
2244 HitTestResult result(request, contentsPoint); 2244 HitTestResult result(request, contentsPoint);
2245 frame->document()->layoutViewItem().hitTest(result); 2245 frame->document()->layoutViewItem().hitTest(result);
2246 2246
2247 if (Node* node = result.innerNode()) 2247 if (Node* node = result.innerNode())
2248 return createVisiblePosition(positionRespectingEditingBoundary(frame->se lection().selection().start(), result.localPoint(), node)); 2248 return createVisiblePositionDeprecated(positionRespectingEditingBoundary (frame->selection().selection().start(), result.localPoint(), node));
2249 return VisiblePosition(); 2249 return VisiblePosition();
2250 } 2250 }
2251 2251
2252 // TODO(yosin): We should use |associatedLayoutObjectOf()| in "VisibleUnits.cpp" 2252 // TODO(yosin): We should use |associatedLayoutObjectOf()| in "VisibleUnits.cpp"
2253 // where it takes |LayoutObject| from |Position|. 2253 // where it takes |LayoutObject| from |Position|.
2254 // Note about ::first-letter pseudo-element: 2254 // Note about ::first-letter pseudo-element:
2255 // When an element has ::first-letter pseudo-element, first letter characters 2255 // When an element has ::first-letter pseudo-element, first letter characters
2256 // are taken from |Text| node and first letter characters are considered 2256 // are taken from |Text| node and first letter characters are considered
2257 // as content of <pseudo:first-letter>. 2257 // as content of <pseudo:first-letter>.
2258 // For following HTML, 2258 // For following HTML,
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
2818 ContainerNode* highestRoot = highestEditableRoot(anchor); 2818 ContainerNode* highestRoot = highestEditableRoot(anchor);
2819 ContainerNode* highestRootOfPos = highestEditableRoot(pos.deepEquivalent()); 2819 ContainerNode* highestRootOfPos = highestEditableRoot(pos.deepEquivalent());
2820 2820
2821 // Return |pos| itself if the two are from the very same editable region, 2821 // Return |pos| itself if the two are from the very same editable region,
2822 // or both are non-editable. 2822 // or both are non-editable.
2823 if (highestRootOfPos == highestRoot) 2823 if (highestRootOfPos == highestRoot)
2824 return pos; 2824 return pos;
2825 2825
2826 // If this is not editable but |pos| has an editable root, skip to the end 2826 // If this is not editable but |pos| has an editable root, skip to the end
2827 if (!highestRoot && highestRootOfPos) 2827 if (!highestRoot && highestRootOfPos)
2828 return createVisiblePosition(PositionTemplate<Strategy>(highestRootOfPos , PositionAnchorType::AfterAnchor).parentAnchoredEquivalent()); 2828 return createVisiblePositionDeprecated(PositionTemplate<Strategy>(highes tRootOfPos, PositionAnchorType::AfterAnchor).parentAnchoredEquivalent());
2829 2829
2830 // That must mean that |pos| is not editable. Return the next position after 2830 // That must mean that |pos| is not editable. Return the next position after
2831 // |pos| that is in the same editable region as this position 2831 // |pos| that is in the same editable region as this position
2832 DCHECK(highestRoot); 2832 DCHECK(highestRoot);
2833 return firstEditableVisiblePositionAfterPositionInRoot(pos.deepEquivalent(), *highestRoot); 2833 return firstEditableVisiblePositionAfterPositionInRoot(pos.deepEquivalent(), *highestRoot);
2834 } 2834 }
2835 2835
2836 template <typename Strategy> 2836 template <typename Strategy>
2837 static UChar32 characterAfterAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition) 2837 static UChar32 characterAfterAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition)
2838 { 2838 {
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
3033 } 3033 }
3034 3034
3035 template <typename Strategy> 3035 template <typename Strategy>
3036 VisiblePositionTemplate<Strategy> leftPositionOfAlgorithm(const VisiblePositionT emplate<Strategy>& visiblePosition) 3036 VisiblePositionTemplate<Strategy> leftPositionOfAlgorithm(const VisiblePositionT emplate<Strategy>& visiblePosition)
3037 { 3037 {
3038 const PositionTemplate<Strategy> pos = leftVisuallyDistinctCandidate(visible Position); 3038 const PositionTemplate<Strategy> pos = leftVisuallyDistinctCandidate(visible Position);
3039 // TODO(yosin) Why can't we move left from the last position in a tree? 3039 // TODO(yosin) Why can't we move left from the last position in a tree?
3040 if (pos.atStartOfTree() || pos.atEndOfTree()) 3040 if (pos.atStartOfTree() || pos.atEndOfTree())
3041 return VisiblePositionTemplate<Strategy>(); 3041 return VisiblePositionTemplate<Strategy>();
3042 3042
3043 const VisiblePositionTemplate<Strategy> left = createVisiblePosition(pos); 3043 const VisiblePositionTemplate<Strategy> left = createVisiblePositionDeprecat ed(pos);
3044 DCHECK_NE(left.deepEquivalent(), visiblePosition.deepEquivalent()); 3044 DCHECK_NE(left.deepEquivalent(), visiblePosition.deepEquivalent());
3045 3045
3046 return directionOfEnclosingBlock(left.deepEquivalent()) == LTR ? honorEditin gBoundaryAtOrBefore(left, visiblePosition.deepEquivalent()) : honorEditingBounda ryAtOrAfter(left, visiblePosition.deepEquivalent()); 3046 return directionOfEnclosingBlock(left.deepEquivalent()) == LTR ? honorEditin gBoundaryAtOrBefore(left, visiblePosition.deepEquivalent()) : honorEditingBounda ryAtOrAfter(left, visiblePosition.deepEquivalent());
3047 } 3047 }
3048 3048
3049 VisiblePosition leftPositionOf(const VisiblePosition& visiblePosition) 3049 VisiblePosition leftPositionOf(const VisiblePosition& visiblePosition)
3050 { 3050 {
3051 return leftPositionOfAlgorithm<EditingStrategy>(visiblePosition); 3051 return leftPositionOfAlgorithm<EditingStrategy>(visiblePosition);
3052 } 3052 }
3053 3053
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
3211 } 3211 }
3212 3212
3213 template <typename Strategy> 3213 template <typename Strategy>
3214 static VisiblePositionTemplate<Strategy> rightPositionOfAlgorithm(const VisibleP ositionTemplate<Strategy>& visiblePosition) 3214 static VisiblePositionTemplate<Strategy> rightPositionOfAlgorithm(const VisibleP ositionTemplate<Strategy>& visiblePosition)
3215 { 3215 {
3216 const PositionTemplate<Strategy> pos = rightVisuallyDistinctCandidate(visibl ePosition); 3216 const PositionTemplate<Strategy> pos = rightVisuallyDistinctCandidate(visibl ePosition);
3217 // FIXME: Why can't we move left from the last position in a tree? 3217 // FIXME: Why can't we move left from the last position in a tree?
3218 if (pos.atStartOfTree() || pos.atEndOfTree()) 3218 if (pos.atStartOfTree() || pos.atEndOfTree())
3219 return VisiblePositionTemplate<Strategy>(); 3219 return VisiblePositionTemplate<Strategy>();
3220 3220
3221 const VisiblePositionTemplate<Strategy> right = createVisiblePosition(pos); 3221 const VisiblePositionTemplate<Strategy> right = createVisiblePositionDepreca ted(pos);
3222 DCHECK_NE(right.deepEquivalent(), visiblePosition.deepEquivalent()); 3222 DCHECK_NE(right.deepEquivalent(), visiblePosition.deepEquivalent());
3223 3223
3224 return directionOfEnclosingBlock(right.deepEquivalent()) == LTR ? honorEditi ngBoundaryAtOrAfter(right, visiblePosition.deepEquivalent()) : honorEditingBound aryAtOrBefore(right, visiblePosition.deepEquivalent()); 3224 return directionOfEnclosingBlock(right.deepEquivalent()) == LTR ? honorEditi ngBoundaryAtOrAfter(right, visiblePosition.deepEquivalent()) : honorEditingBound aryAtOrBefore(right, visiblePosition.deepEquivalent());
3225 } 3225 }
3226 3226
3227 VisiblePosition rightPositionOf(const VisiblePosition& visiblePosition) 3227 VisiblePosition rightPositionOf(const VisiblePosition& visiblePosition)
3228 { 3228 {
3229 return rightPositionOfAlgorithm<EditingStrategy>(visiblePosition); 3229 return rightPositionOfAlgorithm<EditingStrategy>(visiblePosition);
3230 } 3230 }
3231 3231
3232 VisiblePositionInFlatTree rightPositionOf(const VisiblePositionInFlatTree& visib lePosition) 3232 VisiblePositionInFlatTree rightPositionOf(const VisiblePositionInFlatTree& visib lePosition)
3233 { 3233 {
3234 return rightPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition); 3234 return rightPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition);
3235 } 3235 }
3236 3236
3237 template <typename Strategy> 3237 template <typename Strategy>
3238 static VisiblePositionTemplate<Strategy> nextPositionOfAlgorithm(const VisiblePo sitionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule) 3238 static VisiblePositionTemplate<Strategy> nextPositionOfAlgorithm(const VisiblePo sitionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule)
3239 { 3239 {
3240 const VisiblePositionTemplate<Strategy> next = createVisiblePosition(nextVis uallyDistinctCandidate(visiblePosition.deepEquivalent()), visiblePosition.affini ty()); 3240 const VisiblePositionTemplate<Strategy> next = createVisiblePositionDeprecat ed(nextVisuallyDistinctCandidate(visiblePosition.deepEquivalent()), visiblePosit ion.affinity());
3241 3241
3242 switch (rule) { 3242 switch (rule) {
3243 case CanCrossEditingBoundary: 3243 case CanCrossEditingBoundary:
3244 return next; 3244 return next;
3245 case CannotCrossEditingBoundary: 3245 case CannotCrossEditingBoundary:
3246 return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalen t()); 3246 return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalen t());
3247 case CanSkipOverEditingBoundary: 3247 case CanSkipOverEditingBoundary:
3248 return skipToEndOfEditingBoundary(next, visiblePosition.deepEquivalent() ); 3248 return skipToEndOfEditingBoundary(next, visiblePosition.deepEquivalent() );
3249 } 3249 }
3250 NOTREACHED(); 3250 NOTREACHED();
(...skipping 19 matching lines...) Expand all
3270 ContainerNode* highestRoot = highestEditableRoot(anchor); 3270 ContainerNode* highestRoot = highestEditableRoot(anchor);
3271 ContainerNode* highestRootOfPos = highestEditableRoot(pos.deepEquivalent()); 3271 ContainerNode* highestRootOfPos = highestEditableRoot(pos.deepEquivalent());
3272 3272
3273 // Return |pos| itself if the two are from the very same editable region, or 3273 // Return |pos| itself if the two are from the very same editable region, or
3274 // both are non-editable. 3274 // both are non-editable.
3275 if (highestRootOfPos == highestRoot) 3275 if (highestRootOfPos == highestRoot)
3276 return pos; 3276 return pos;
3277 3277
3278 // If this is not editable but |pos| has an editable root, skip to the start 3278 // If this is not editable but |pos| has an editable root, skip to the start
3279 if (!highestRoot && highestRootOfPos) 3279 if (!highestRoot && highestRootOfPos)
3280 return createVisiblePosition(previousVisuallyDistinctCandidate(PositionT emplate<Strategy>(highestRootOfPos, PositionAnchorType::BeforeAnchor).parentAnch oredEquivalent())); 3280 return createVisiblePositionDeprecated(previousVisuallyDistinctCandidate (PositionTemplate<Strategy>(highestRootOfPos, PositionAnchorType::BeforeAnchor). parentAnchoredEquivalent()));
3281 3281
3282 // That must mean that |pos| is not editable. Return the last position 3282 // That must mean that |pos| is not editable. Return the last position
3283 // before |pos| that is in the same editable region as this position 3283 // before |pos| that is in the same editable region as this position
3284 DCHECK(highestRoot); 3284 DCHECK(highestRoot);
3285 return lastEditableVisiblePositionBeforePositionInRoot(pos.deepEquivalent(), *highestRoot); 3285 return lastEditableVisiblePositionBeforePositionInRoot(pos.deepEquivalent(), *highestRoot);
3286 } 3286 }
3287 3287
3288 template <typename Strategy> 3288 template <typename Strategy>
3289 static VisiblePositionTemplate<Strategy> previousPositionOfAlgorithm(const Visib lePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule) 3289 static VisiblePositionTemplate<Strategy> previousPositionOfAlgorithm(const Visib lePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule)
3290 { 3290 {
3291 const PositionTemplate<Strategy> pos = previousVisuallyDistinctCandidate(vis iblePosition.deepEquivalent()); 3291 const PositionTemplate<Strategy> pos = previousVisuallyDistinctCandidate(vis iblePosition.deepEquivalent());
3292 3292
3293 // return null visible position if there is no previous visible position 3293 // return null visible position if there is no previous visible position
3294 if (pos.atStartOfTree()) 3294 if (pos.atStartOfTree())
3295 return VisiblePositionTemplate<Strategy>(); 3295 return VisiblePositionTemplate<Strategy>();
3296 3296
3297 // we should always be able to make the affinity |TextAffinity::Downstream|, 3297 // we should always be able to make the affinity |TextAffinity::Downstream|,
3298 // because going previous from an |TextAffinity::Upstream| position can 3298 // because going previous from an |TextAffinity::Upstream| position can
3299 // never yield another |TextAffinity::Upstream position| (unless line wrap 3299 // never yield another |TextAffinity::Upstream position| (unless line wrap
3300 // length is 0!). 3300 // length is 0!).
3301 const VisiblePositionTemplate<Strategy> prev = createVisiblePosition(pos); 3301 const VisiblePositionTemplate<Strategy> prev = createVisiblePositionDeprecat ed(pos);
3302 if (prev.deepEquivalent() == visiblePosition.deepEquivalent()) 3302 if (prev.deepEquivalent() == visiblePosition.deepEquivalent())
3303 return VisiblePositionTemplate<Strategy>(); 3303 return VisiblePositionTemplate<Strategy>();
3304 3304
3305 switch (rule) { 3305 switch (rule) {
3306 case CanCrossEditingBoundary: 3306 case CanCrossEditingBoundary:
3307 return prev; 3307 return prev;
3308 case CannotCrossEditingBoundary: 3308 case CannotCrossEditingBoundary:
3309 return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivale nt()); 3309 return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivale nt());
3310 case CanSkipOverEditingBoundary: 3310 case CanSkipOverEditingBoundary:
3311 return skipToStartOfEditingBoundary(prev, visiblePosition.deepEquivalent ()); 3311 return skipToStartOfEditingBoundary(prev, visiblePosition.deepEquivalent ());
3312 } 3312 }
3313 3313
3314 NOTREACHED(); 3314 NOTREACHED();
3315 return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivalent() ); 3315 return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivalent() );
3316 } 3316 }
3317 3317
3318 VisiblePosition previousPositionOf(const VisiblePosition& visiblePosition, Editi ngBoundaryCrossingRule rule) 3318 VisiblePosition previousPositionOf(const VisiblePosition& visiblePosition, Editi ngBoundaryCrossingRule rule)
3319 { 3319 {
3320 return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule); 3320 return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule);
3321 } 3321 }
3322 3322
3323 VisiblePositionInFlatTree previousPositionOf(const VisiblePositionInFlatTree& vi siblePosition, EditingBoundaryCrossingRule rule) 3323 VisiblePositionInFlatTree previousPositionOf(const VisiblePositionInFlatTree& vi siblePosition, EditingBoundaryCrossingRule rule)
3324 { 3324 {
3325 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePositio n, rule); 3325 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePositio n, rule);
3326 } 3326 }
3327 3327
3328 } // namespace blink 3328 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698