Index: Source/core/dom/ContainerNode.cpp |
diff --git a/Source/core/dom/ContainerNode.cpp b/Source/core/dom/ContainerNode.cpp |
index 71aaabaefc7a916f48eb9d6fcbe36fbf272feeab..8485a7e87181a6553a6606b429c563c83ef81ac9 100644 |
--- a/Source/core/dom/ContainerNode.cpp |
+++ b/Source/core/dom/ContainerNode.cpp |
@@ -177,7 +177,7 @@ bool ContainerNode::checkAcceptChildGuaranteedNodeTypes(const Node& newChild, Ex |
return true; |
} |
-void ContainerNode::insertBefore(PassRefPtrWillBeRawPtr<Node> newChild, Node* refChild, ExceptionState& exceptionState) |
+PassRefPtrWillBeRawPtr<Node> ContainerNode::insertBefore(PassRefPtrWillBeRawPtr<Node> newChild, Node* refChild, ExceptionState& exceptionState) |
{ |
#if !ENABLE(OILPAN) |
// Check that this node is not "floating". |
@@ -189,36 +189,42 @@ void ContainerNode::insertBefore(PassRefPtrWillBeRawPtr<Node> newChild, Node* re |
// insertBefore(node, 0) is equivalent to appendChild(node) |
if (!refChild) { |
- appendChild(newChild, exceptionState); |
- return; |
+ return appendChild(newChild, exceptionState); |
} |
// Make sure adding the new child is OK. |
- if (!checkAcceptChild(newChild.get(), 0, exceptionState)) |
- return; |
+ if (!checkAcceptChild(newChild.get(), 0, exceptionState)) { |
+ if (exceptionState.hadException()) |
+ return nullptr; |
+ return newChild; |
+ } |
ASSERT(newChild); |
// NotFoundError: Raised if refChild is not a child of this node |
if (refChild->parentNode() != this) { |
exceptionState.throwDOMException(NotFoundError, "The node before which the new node is to be inserted is not a child of this node."); |
- return; |
+ return nullptr; |
} |
- if (refChild->previousSibling() == newChild || refChild == newChild) // nothing to do |
- return; |
+ // nothing to do |
+ if (refChild->previousSibling() == newChild || refChild == newChild) |
+ return newChild; |
RefPtrWillBeRawPtr<Node> next = refChild; |
NodeVector targets; |
collectChildrenAndRemoveFromOldParent(*newChild, targets, exceptionState); |
if (exceptionState.hadException()) |
- return; |
+ return nullptr; |
if (targets.isEmpty()) |
- return; |
+ return newChild; |
// We need this extra check because collectChildrenAndRemoveFromOldParent() can fire mutation events. |
- if (!checkAcceptChildGuaranteedNodeTypes(*newChild, exceptionState)) |
- return; |
+ if (!checkAcceptChildGuaranteedNodeTypes(*newChild, exceptionState)) { |
+ if (exceptionState.hadException()) |
+ return nullptr; |
+ return newChild; |
+ } |
InspectorInstrumentation::willInsertDOMNode(this); |
@@ -244,6 +250,8 @@ void ContainerNode::insertBefore(PassRefPtrWillBeRawPtr<Node> newChild, Node* re |
} |
dispatchSubtreeModifiedEvent(); |
+ |
+ return newChild; |
} |
void ContainerNode::insertBeforeCommon(Node& nextChild, Node& newChild) |
@@ -592,7 +600,7 @@ void ContainerNode::removeChildren() |
dispatchSubtreeModifiedEvent(); |
} |
-void ContainerNode::appendChild(PassRefPtrWillBeRawPtr<Node> newChild, ExceptionState& exceptionState) |
+PassRefPtrWillBeRawPtr<Node> ContainerNode::appendChild(PassRefPtrWillBeRawPtr<Node> newChild, ExceptionState& exceptionState) |
{ |
RefPtrWillBeRawPtr<ContainerNode> protect(this); |
@@ -603,24 +611,30 @@ void ContainerNode::appendChild(PassRefPtrWillBeRawPtr<Node> newChild, Exception |
#endif |
// Make sure adding the new child is ok |
- if (!checkAcceptChild(newChild.get(), 0, exceptionState)) |
- return; |
+ if (!checkAcceptChild(newChild.get(), 0, exceptionState)) { |
+ if (exceptionState.hadException()) |
+ return nullptr; |
+ return newChild; |
+ } |
ASSERT(newChild); |
if (newChild == m_lastChild) // nothing to do |
- return; |
+ return newChild; |
NodeVector targets; |
collectChildrenAndRemoveFromOldParent(*newChild, targets, exceptionState); |
if (exceptionState.hadException()) |
- return; |
+ return nullptr; |
if (targets.isEmpty()) |
- return; |
+ return newChild; |
// We need this extra check because collectChildrenAndRemoveFromOldParent() can fire mutation events. |
- if (!checkAcceptChildGuaranteedNodeTypes(*newChild, exceptionState)) |
- return; |
+ if (!checkAcceptChildGuaranteedNodeTypes(*newChild, exceptionState)) { |
+ if (exceptionState.hadException()) |
+ return nullptr; |
+ return newChild; |
+ } |
InspectorInstrumentation::willInsertDOMNode(this); |
@@ -648,6 +662,7 @@ void ContainerNode::appendChild(PassRefPtrWillBeRawPtr<Node> newChild, Exception |
} |
dispatchSubtreeModifiedEvent(); |
+ return newChild; |
} |
void ContainerNode::parserAppendChild(PassRefPtrWillBeRawPtr<Node> newChild) |