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

Unified Diff: third_party/WebKit/Source/core/editing/commands/InsertListCommand.cpp

Issue 1570733002: [Editing][BugFix] Check editability in InserListCommand::listifyParagraph (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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/commands/InsertListCommand.cpp
diff --git a/third_party/WebKit/Source/core/editing/commands/InsertListCommand.cpp b/third_party/WebKit/Source/core/editing/commands/InsertListCommand.cpp
index 1dcb8a8c35ae222f013f6e75806c938d4e6cda72..d22018fcedb3743d2fc5bfed7ef8f9cc4862016c 100644
--- a/third_party/WebKit/Source/core/editing/commands/InsertListCommand.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/InsertListCommand.cpp
@@ -362,6 +362,17 @@ PassRefPtrWillBeRawPtr<HTMLElement> InsertListCommand::listifyParagraph(const Vi
if (start.isNull() || end.isNull())
return nullptr;
+ {
+ // The paragraph between |start| and |end| shoule be editable.
+ Position startPosition = start.toParentAnchoredPosition();
yosin_UTC9 2016/01/12 05:51:44 nit: |const Position&|
+ Position endPosition = end.toParentAnchoredPosition();
yosin_UTC9 2016/01/12 05:51:44 nit: |const Position&|
+ if (!isEditablePosition(startPosition) || !isEditablePosition(endPosition))
+ return nullptr;
+ Node* commonAncestor = NodeTraversal::commonAncestor(*startPosition.anchorNode(), *endPosition.anchorNode());
+ if (!commonAncestor || !commonAncestor->hasEditableStyle())
+ return nullptr;
+ }
+
// Check for adjoining lists.
RefPtrWillBeRawPtr<HTMLElement> listItemElement = HTMLLIElement::create(document());
RefPtrWillBeRawPtr<HTMLBRElement> placeholder = HTMLBRElement::create(document());
@@ -370,15 +381,15 @@ PassRefPtrWillBeRawPtr<HTMLElement> InsertListCommand::listifyParagraph(const Vi
// Place list item into adjoining lists.
HTMLElement* previousList = adjacentEnclosingList(start, previousPositionOf(start, CannotCrossEditingBoundary), listTag);
HTMLElement* nextList = adjacentEnclosingList(start, nextPositionOf(end, CannotCrossEditingBoundary), listTag);
- RefPtrWillBeRawPtr<HTMLElement> listElement = nullptr;
+ RefPtrWillBeRawPtr<HTMLElement> newListElementToBeInserted = nullptr;
yosin_UTC9 2016/01/12 05:51:44 It seems renaming |listElement| to |lnewListElemen
if (previousList) {
appendNode(listItemElement, previousList);
} else if (nextList) {
insertNodeAt(listItemElement, positionBeforeNode(nextList));
} else {
// Create the list.
- listElement = createHTMLElement(document(), listTag);
- appendNode(listItemElement, listElement);
+ newListElementToBeInserted = createHTMLElement(document(), listTag);
+ appendNode(listItemElement, newListElementToBeInserted);
if (start.deepEquivalent() == end.deepEquivalent() && isEnclosingBlock(start.deepEquivalent().anchorNode())) {
// Inserting the list into an empty paragraph that isn't held open
@@ -400,7 +411,7 @@ PassRefPtrWillBeRawPtr<HTMLElement> InsertListCommand::listifyParagraph(const Vi
if (isHTMLLIElement(listChild))
insertionPos = positionInParentBeforeNode(*listChild);
- insertNodeAt(listElement, insertionPos);
+ insertNodeAt(newListElementToBeInserted, insertionPos);
// We inserted the list at the start of the content we're about to move
// Update the start of content, so we don't try to move the list into itself. bug 19066
@@ -413,17 +424,17 @@ PassRefPtrWillBeRawPtr<HTMLElement> InsertListCommand::listifyParagraph(const Vi
// Inserting list element and list item list may change start of pargraph
// to move. We calculate start of paragraph again.
document().updateLayoutIgnorePendingStylesheets();
- start = startOfParagraph(start, CanSkipOverEditingBoundary);
- end = endOfParagraph(start, CanSkipOverEditingBoundary);
- moveParagraph(start, end, createVisiblePosition(positionBeforeNode(placeholder.get())), true);
+ const VisiblePosition paragraphStartToInsert = startOfParagraph(start, CanSkipOverEditingBoundary);
yosin_UTC9 2016/01/12 05:51:44 nit: |const VisiblePosition&| This is kind of rena
+ moveParagraph(paragraphStartToInsert, endOfParagraph(paragraphStartToInsert, CanSkipOverEditingBoundary),
+ createVisiblePosition(positionBeforeNode(placeholder.get())), true);
- if (listElement)
- return mergeWithNeighboringLists(listElement);
+ if (newListElementToBeInserted)
+ return mergeWithNeighboringLists(newListElementToBeInserted);
if (canMergeLists(previousList, nextList))
mergeIdenticalElements(previousList, nextList);
- return listElement;
+ return nullptr;
}
DEFINE_TRACE(InsertListCommand)

Powered by Google App Engine
This is Rietveld 408576698