Index: Source/WebCore/dom/ContainerNodeAlgorithms.h |
=================================================================== |
--- Source/WebCore/dom/ContainerNodeAlgorithms.h (revision 115606) |
+++ Source/WebCore/dom/ContainerNodeAlgorithms.h (working copy) |
@@ -83,18 +83,21 @@ |
// Helper methods for removeAllChildrenInContainer, hidden from WebCore namespace |
namespace Private { |
- template<class GenericNode, bool dispatchRemovalNotification> |
+ template<class GenericNode, class GenericNodeContainer, bool dispatchRemovalNotification> |
struct NodeRemovalDispatcher { |
- static void dispatch(GenericNode*) |
+ static void dispatch(GenericNode*, GenericNodeContainer*) |
{ |
// no-op, by default |
} |
}; |
- template<class GenericNode> |
- struct NodeRemovalDispatcher<GenericNode, true> { |
- static void dispatch(GenericNode* node) |
+ template<class GenericNode, class GenericNodeContainer> |
+ struct NodeRemovalDispatcher<GenericNode, GenericNodeContainer, true> { |
+ static void dispatch(GenericNode* node, GenericNodeContainer* container) |
{ |
+ // Clean up any TreeScope to a removed tree. |
+ if (Document* containerDocument = container->ownerDocument()) |
+ containerDocument->adoptIfNeeded(node); |
if (node->inDocument()) |
node->removedFromDocument(); |
} |
@@ -137,7 +140,7 @@ |
tail = n; |
} else { |
RefPtr<GenericNode> protect(n); // removedFromDocument may remove remove all references to this node. |
- NodeRemovalDispatcher<GenericNode, ShouldDispatchRemovalNotification<GenericNode>::value>::dispatch(n); |
+ NodeRemovalDispatcher<GenericNode, GenericNodeContainer, ShouldDispatchRemovalNotification<GenericNode>::value>::dispatch(n, container); |
} |
} |