| Index: Source/core/editing/ReplaceSelectionCommand.cpp
|
| diff --git a/Source/core/editing/ReplaceSelectionCommand.cpp b/Source/core/editing/ReplaceSelectionCommand.cpp
|
| index a77d2b07c3bfd0ed2fe63d031c3149190abcabaa..3dcd36b7ecd71fdcb15db53f867c9264f6afedd1 100644
|
| --- a/Source/core/editing/ReplaceSelectionCommand.cpp
|
| +++ b/Source/core/editing/ReplaceSelectionCommand.cpp
|
| @@ -322,26 +322,23 @@ void ReplacementFragment::removeInterchangeNodes(Node* container)
|
| }
|
| }
|
|
|
| -inline void ReplaceSelectionCommand::InsertedNodes::respondToNodeInsertion(Node* node)
|
| +inline void ReplaceSelectionCommand::InsertedNodes::respondToNodeInsertion(Node& node)
|
| {
|
| - if (!node)
|
| - return;
|
| -
|
| if (!m_firstNodeInserted)
|
| - m_firstNodeInserted = node;
|
| + m_firstNodeInserted = &node;
|
|
|
| - m_lastNodeInserted = node;
|
| + m_lastNodeInserted = &node;
|
| }
|
|
|
| -inline void ReplaceSelectionCommand::InsertedNodes::willRemoveNodePreservingChildren(Node* node)
|
| +inline void ReplaceSelectionCommand::InsertedNodes::willRemoveNodePreservingChildren(Node& node)
|
| {
|
| if (m_firstNodeInserted == node)
|
| - m_firstNodeInserted = NodeTraversal::next(node);
|
| + m_firstNodeInserted = NodeTraversal::next(&node);
|
| if (m_lastNodeInserted == node)
|
| - m_lastNodeInserted = node->lastChild() ? node->lastChild() : NodeTraversal::nextSkippingChildren(node);
|
| + m_lastNodeInserted = node.lastChild() ? node.lastChild() : NodeTraversal::nextSkippingChildren(&node);
|
| }
|
|
|
| -inline void ReplaceSelectionCommand::InsertedNodes::willRemoveNode(Node* node)
|
| +inline void ReplaceSelectionCommand::InsertedNodes::willRemoveNode(Node& node)
|
| {
|
| if (m_firstNodeInserted == node && m_lastNodeInserted == node) {
|
| m_firstNodeInserted = 0;
|
| @@ -352,12 +349,12 @@ inline void ReplaceSelectionCommand::InsertedNodes::willRemoveNode(Node* node)
|
| m_lastNodeInserted = NodeTraversal::previousSkippingChildren(m_lastNodeInserted.get());
|
| }
|
|
|
| -inline void ReplaceSelectionCommand::InsertedNodes::didReplaceNode(Node* node, Node* newNode)
|
| +inline void ReplaceSelectionCommand::InsertedNodes::didReplaceNode(Node& node, Node& newNode)
|
| {
|
| if (m_firstNodeInserted == node)
|
| - m_firstNodeInserted = newNode;
|
| + m_firstNodeInserted = &newNode;
|
| if (m_lastNodeInserted == node)
|
| - m_lastNodeInserted = newNode;
|
| + m_lastNodeInserted = &newNode;
|
| }
|
|
|
| ReplaceSelectionCommand::ReplaceSelectionCommand(Document& document, PassRefPtr<DocumentFragment> fragment, CommandOptions options, EditAction editAction)
|
| @@ -483,12 +480,13 @@ void ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline(Insert
|
| if (element->isHTMLElement()) {
|
| Vector<QualifiedName> attributes;
|
| HTMLElement* htmlElement = toHTMLElement(element);
|
| + ASSERT(htmlElement);
|
|
|
| if (newInlineStyle->conflictsWithImplicitStyleOfElement(htmlElement)) {
|
| // e.g. <b style="font-weight: normal;"> is converted to <span style="font-weight: normal;">
|
| node = replaceElementWithSpanPreservingChildrenAndAttributes(htmlElement);
|
| element = toElement(node);
|
| - insertedNodes.didReplaceNode(htmlElement, node.get());
|
| + insertedNodes.didReplaceNode(*htmlElement, *node);
|
| } else if (newInlineStyle->extractConflictingImplicitStyleOfAttributes(htmlElement, EditingStyle::PreserveWritingDirection, 0, attributes,
|
| EditingStyle::DoNotExtractMatchingStyle)) {
|
| // e.g. <font size="3" style="font-size: 20px;"> is converted to <font style="font-size: 20px;">
|
| @@ -510,7 +508,7 @@ void ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline(Insert
|
|
|
| if (!inlineStyle || newInlineStyle->isEmpty()) {
|
| if (isStyleSpanOrSpanWithOnlyStyleAttribute(element) || isEmptyFontTag(element, AllowNonEmptyStyleAttribute)) {
|
| - insertedNodes.willRemoveNodePreservingChildren(element);
|
| + insertedNodes.willRemoveNodePreservingChildren(*element);
|
| removeNodePreservingChildren(element);
|
| continue;
|
| }
|
| @@ -522,7 +520,7 @@ void ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline(Insert
|
| if (isNonTableCellHTMLBlockElement(element) && areIdenticalElements(element, element->parentNode())
|
| && VisiblePosition(firstPositionInNode(element->parentNode())) == VisiblePosition(firstPositionInNode(element))
|
| && VisiblePosition(lastPositionInNode(element->parentNode())) == VisiblePosition(lastPositionInNode(element))) {
|
| - insertedNodes.willRemoveNodePreservingChildren(element);
|
| + insertedNodes.willRemoveNodePreservingChildren(*element);
|
| removeNodePreservingChildren(element);
|
| continue;
|
| }
|
| @@ -534,7 +532,7 @@ void ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline(Insert
|
| // Keep this code around for backward compatibility
|
| if (isLegacyAppleStyleSpan(element)) {
|
| if (!element->firstChild()) {
|
| - insertedNodes.willRemoveNodePreservingChildren(element);
|
| + insertedNodes.willRemoveNodePreservingChildren(*element);
|
| removeNodePreservingChildren(element);
|
| continue;
|
| }
|
| @@ -671,7 +669,7 @@ void ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds(InsertedNodes& ins
|
| if (lastLeafInserted.isTextNode() && !nodeHasVisibleRenderText(toText(lastLeafInserted))
|
| && !enclosingNodeWithTag(firstPositionInOrBeforeNode(&lastLeafInserted), selectTag)
|
| && !enclosingNodeWithTag(firstPositionInOrBeforeNode(&lastLeafInserted), scriptTag)) {
|
| - insertedNodes.willRemoveNode(&lastLeafInserted);
|
| + insertedNodes.willRemoveNode(lastLeafInserted);
|
| removeNode(&lastLeafInserted);
|
| }
|
|
|
| @@ -679,7 +677,7 @@ void ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds(InsertedNodes& ins
|
| // it is a top level node in the fragment and the user can't insert into those elements.
|
| Node* firstNodeInserted = insertedNodes.firstNodeInserted();
|
| if (firstNodeInserted && firstNodeInserted->isTextNode() && !nodeHasVisibleRenderText(toText(*firstNodeInserted))) {
|
| - insertedNodes.willRemoveNode(firstNodeInserted);
|
| + insertedNodes.willRemoveNode(*firstNodeInserted);
|
| removeNode(firstNodeInserted);
|
| }
|
| }
|
| @@ -787,7 +785,7 @@ void ReplaceSelectionCommand::handleStyleSpans(InsertedNodes& insertedNodes)
|
| style->removeBlockProperties();
|
|
|
| if (style->isEmpty() || !wrappingStyleSpan->firstChild()) {
|
| - insertedNodes.willRemoveNodePreservingChildren(wrappingStyleSpan);
|
| + insertedNodes.willRemoveNodePreservingChildren(*wrappingStyleSpan);
|
| removeNodePreservingChildren(wrappingStyleSpan);
|
| } else
|
| setNodeAttribute(wrappingStyleSpan, styleAttr, style->style()->asText());
|
| @@ -1067,6 +1065,7 @@ void ReplaceSelectionCommand::doApply()
|
|
|
| InsertedNodes insertedNodes;
|
| RefPtr<Node> refNode = fragment.firstChild();
|
| + ASSERT(refNode);
|
| RefPtr<Node> node = refNode->nextSibling();
|
|
|
| fragment.removeNode(refNode);
|
| @@ -1077,7 +1076,7 @@ void ReplaceSelectionCommand::doApply()
|
| refNode = insertAsListItems(toHTMLElement(refNode), blockStart, insertionPos, insertedNodes);
|
| else {
|
| insertNodeAt(refNode, insertionPos);
|
| - insertedNodes.respondToNodeInsertion(refNode.get());
|
| + insertedNodes.respondToNodeInsertion(*refNode);
|
| }
|
|
|
| // Mutation events (bug 22634) may have already removed the inserted content
|
| @@ -1089,8 +1088,8 @@ void ReplaceSelectionCommand::doApply()
|
| while (node) {
|
| RefPtr<Node> next = node->nextSibling();
|
| fragment.removeNode(node.get());
|
| - insertNodeAfter(node, refNode.get());
|
| - insertedNodes.respondToNodeInsertion(node.get());
|
| + insertNodeAfter(node, refNode);
|
| + insertedNodes.respondToNodeInsertion(*node);
|
|
|
| // Mutation events (bug 22634) may have already removed the inserted content
|
| if (!node->inDocument())
|
| @@ -1120,10 +1119,10 @@ void ReplaceSelectionCommand::doApply()
|
|
|
| if (endBR && (plainTextFragment || shouldRemoveEndBR(endBR, originalVisPosBeforeEndBR))) {
|
| RefPtr<Node> parent = endBR->parentNode();
|
| - insertedNodes.willRemoveNode(endBR);
|
| + insertedNodes.willRemoveNode(*endBR);
|
| removeNode(endBR);
|
| if (Node* nodeToRemove = highestNodeToRemoveInPruning(parent.get())) {
|
| - insertedNodes.willRemoveNode(nodeToRemove);
|
| + insertedNodes.willRemoveNode(*nodeToRemove);
|
| removeNode(nodeToRemove);
|
| }
|
| }
|
| @@ -1432,10 +1431,10 @@ Node* ReplaceSelectionCommand::insertAsListItems(PassRefPtr<HTMLElement> prpList
|
| listElement->removeChild(listItem.get(), ASSERT_NO_EXCEPTION);
|
| if (isStart || isMiddle) {
|
| insertNodeBefore(listItem, lastNode);
|
| - insertedNodes.respondToNodeInsertion(listItem.get());
|
| + insertedNodes.respondToNodeInsertion(*listItem);
|
| } else if (isEnd) {
|
| insertNodeAfter(listItem, lastNode);
|
| - insertedNodes.respondToNodeInsertion(listItem.get());
|
| + insertedNodes.respondToNodeInsertion(*listItem);
|
| lastNode = listItem.get();
|
| } else
|
| ASSERT_NOT_REACHED();
|
|
|