Bug 1317409 - Handle failing node adoption properly. r=peterv, a=ritu
--- a/dom/base/nsNodeUtils.cpp
+++ b/dom/base/nsNodeUtils.cpp
@@ -565,18 +565,23 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNod
if (aReparentScope) {
AutoJSContext cx;
JS::Rooted<JSObject*> wrapper(cx);
if ((wrapper = aNode->GetWrapper())) {
MOZ_ASSERT(IsDOMObject(wrapper));
JSAutoCompartment ac(cx, wrapper);
rv = ReparentWrapper(cx, wrapper);
if (NS_FAILED(rv)) {
+ if (wasRegistered) {
+ aNode->OwnerDoc()->UnregisterActivityObserver(aNode->AsElement());
+ }
aNode->mNodeInfo.swap(newNodeInfo);
-
+ if (wasRegistered) {
+ aNode->OwnerDoc()->RegisterActivityObserver(aNode->AsElement());
+ }
return rv;
}
}
}
}
if (aDeep && (!aClone || !aNode->IsNodeOfType(nsINode::eATTRIBUTE))) {
// aNode's children.