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

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

Issue 2753193002: Editing: Indent command: Do not insert BLOCKQUOTE under the root HTML element. (Closed)
Patch Set: . Created 3 years, 9 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 251dd1fc6e4ca94b56807bbe0a6481345a4a0042..0e3e828398915b9164787faf28df66291cd16d61 100644
--- a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
+++ b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
@@ -1826,6 +1826,8 @@ PositionTemplate<Strategy> startOfParagraphAlgorithm(
CannotCrossEditingBoundary);
ContainerNode* const highestRoot = highestEditableRoot(position);
const bool startNodeIsEditable = hasEditableStyle(*startNode);
+ const HTMLElement* body = startNode->document().body();
yosin_UTC9 2017/03/17 10:04:11 Could you move VisibleUnits.cpp change in another
+ const bool startNodeIsInBody = body && Strategy::contains(*body, *startNode);
Node* candidateNode = startNode;
PositionAnchorType candidateType = position.anchorType();
@@ -1848,6 +1850,10 @@ PositionTemplate<Strategy> startOfParagraphAlgorithm(
break;
}
+ if (startNodeIsInBody !=
yosin_UTC9 2017/03/17 10:04:11 There are three occurrences of this pattern. Is it
+ (body && Strategy::contains(*body, *previousNodeIterator)))
+ break;
+
const LayoutItem layoutItem =
LayoutItem(previousNodeIterator->layoutObject());
if (layoutItem.isNull()) {
@@ -1944,6 +1950,8 @@ static PositionTemplate<Strategy> endOfParagraphAlgorithm(
CannotCrossEditingBoundary);
ContainerNode* const highestRoot = highestEditableRoot(position);
const bool startNodeIsEditable = hasEditableStyle(*startNode);
+ const HTMLElement* body = startNode->document().body();
+ const bool startNodeIsInBody = body && Strategy::contains(*body, *startNode);
Node* candidateNode = startNode;
PositionAnchorType candidateType = position.anchorType();
@@ -1963,6 +1971,10 @@ static PositionTemplate<Strategy> endOfParagraphAlgorithm(
break;
}
+ if (startNodeIsInBody !=
+ (body && Strategy::contains(*body, *nextNodeIterator)))
+ break;
+
LayoutObject* const layoutObject = nextNodeIterator->layoutObject();
if (!layoutObject) {
nextNodeIterator = Strategy::next(*nextNodeIterator, startBlock);
@@ -2928,6 +2940,8 @@ static PositionTemplate<Strategy> mostBackwardCaretPosition(
adjustPositionForBackwardIteration<Strategy>(position));
PositionIteratorAlgorithm<Strategy> currentPos = lastVisible;
bool startEditable = hasEditableStyle(*startNode);
+ const HTMLElement* body = startNode->document().body();
+ const bool startNodeIsInBody = body && Strategy::contains(*body, *startNode);
Node* lastNode = startNode;
bool boundaryCrossed = false;
for (; !currentPos.atStart(); currentPos.decrement()) {
@@ -2945,6 +2959,9 @@ static PositionTemplate<Strategy> mostBackwardCaretPosition(
lastNode = currentNode;
}
+ if (startNodeIsInBody != (body && Strategy::contains(*body, *currentNode)))
+ break;
+
// If we've moved to a position that is visually distinct, return the last
// saved position. There is code below that terminates early if we're
// *about* to move to a visually distinct position.
@@ -3123,7 +3140,8 @@ PositionTemplate<Strategy> mostForwardCaretPosition(
// stop before going above the body, up into the head
// return the last visible streamer position
- if (isHTMLBodyElement(*currentNode) && currentPos.atEndOfNode())
+ if (currentNode->document().body() == currentNode &&
+ currentPos.atEndOfNode())
break;
// Do not move to a visually distinct position.

Powered by Google App Engine
This is Rietveld 408576698