Fix Range.insertNode
Bug: 11676314
Clean cherry pick https://codereview.chromium.org/26358006. Only
cherry picked the source code and not the layout tests.
Change-Id: I268c9c7f7cfe63465ad3877fd24e1613849fa7e4
diff --git a/Source/core/dom/Range.cpp b/Source/core/dom/Range.cpp
index 8d1ad9d..64034db 100644
--- a/Source/core/dom/Range.cpp
+++ b/Source/core/dom/Range.cpp
@@ -1034,9 +1034,15 @@
if (collapsed)
m_end.setToBeforeChild(newText.get());
} else {
- RefPtr<Node> lastChild;
- if (collapsed)
- lastChild = (newNodeType == Node::DOCUMENT_FRAGMENT_NODE) ? newNode->lastChild() : newNode;
+ RefPtr<Node> lastChild = (newNodeType == Node::DOCUMENT_FRAGMENT_NODE) ? newNode->lastChild() : newNode;
+ if (lastChild && lastChild == m_start.childBefore()) {
+ // The insertion will do nothing, but we need to extend the range to include
+ // the inserted nodes.
+ Node* firstChild = (newNodeType == Node::DOCUMENT_FRAGMENT_NODE) ? newNode->firstChild() : newNode.get();
+ ASSERT(firstChild);
+ m_start.setToBeforeChild(firstChild);
+ return;
+ }
int startOffset = m_start.offset();
container = m_start.container();