diff --git a/dom/base/Attr.cpp b/dom/base/Attr.cpp index 1a9171ee4cf2..aa262c45d0fe 100644 --- a/dom/base/Attr.cpp +++ b/dom/base/Attr.cpp @@ -289,18 +289,6 @@ Attr::InsertChildBefore(nsIContent* aKid, nsIContent* aBeforeThis, return NS_ERROR_NOT_IMPLEMENTED; } -nsresult -Attr::InsertChildAt_Deprecated(nsIContent* aKid, uint32_t aIndex, - bool aNotify) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -void -Attr::RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) -{ -} - void Attr::RemoveChildNode(nsIContent* aKid, bool aNotify) { diff --git a/dom/base/Attr.h b/dom/base/Attr.h index d0040506b04e..2d73ec085719 100644 --- a/dom/base/Attr.h +++ b/dom/base/Attr.h @@ -63,9 +63,6 @@ public: virtual int32_t ComputeIndexOf(const nsINode* aPossibleChild) const override; virtual nsresult InsertChildBefore(nsIContent* aKid, nsIContent* aBeforeThis, bool aNotify) override; - virtual nsresult InsertChildAt_Deprecated(nsIContent* aKid, uint32_t aIndex, - bool aNotify) override; - virtual void RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) override; virtual void RemoveChildNode(nsIContent* aKid, bool aNotify) override; virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult, bool aPreallocateChildren) const override; diff --git a/dom/base/CharacterData.cpp b/dom/base/CharacterData.cpp index 806e6653731e..c66a8294744c 100644 --- a/dom/base/CharacterData.cpp +++ b/dom/base/CharacterData.cpp @@ -634,19 +634,6 @@ CharacterData::InsertChildBefore(nsIContent* aKid, return NS_OK; } -nsresult -CharacterData::InsertChildAt_Deprecated(nsIContent* aKid, - uint32_t aIndex, - bool aNotify) -{ - return NS_OK; -} - -void -CharacterData::RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) -{ -} - void CharacterData::RemoveChildNode(nsIContent* aKid, bool aNotify) { diff --git a/dom/base/CharacterData.h b/dom/base/CharacterData.h index 12f9d13b443e..f9f8027c2ff7 100644 --- a/dom/base/CharacterData.h +++ b/dom/base/CharacterData.h @@ -105,9 +105,6 @@ public: virtual int32_t ComputeIndexOf(const nsINode* aPossibleChild) const override; virtual nsresult InsertChildBefore(nsIContent* aKid, nsIContent* aBeforeThis, bool aNotify) override; - virtual nsresult InsertChildAt_Deprecated(nsIContent* aKid, uint32_t aIndex, - bool aNotify) override; - virtual void RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) override; virtual void RemoveChildNode(nsIContent* aKid, bool aNotify) override; virtual void GetTextContentInternal(nsAString& aTextContent, OOMReporter& aError) override diff --git a/dom/base/FragmentOrElement.cpp b/dom/base/FragmentOrElement.cpp index 369ae38009a0..737cdb4f7088 100644 --- a/dom/base/FragmentOrElement.cpp +++ b/dom/base/FragmentOrElement.cpp @@ -1225,27 +1225,6 @@ FragmentOrElement::InsertChildBefore(nsIContent* aKid, return doInsertChildAt(aKid, index, aNotify, mAttrsAndChildren); } -nsresult -FragmentOrElement::InsertChildAt_Deprecated(nsIContent* aKid, - uint32_t aIndex, - bool aNotify) -{ - MOZ_ASSERT(aKid, "null ptr"); - - return doInsertChildAt(aKid, aIndex, aNotify, mAttrsAndChildren); -} - -void -FragmentOrElement::RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) -{ - nsCOMPtr oldKid = mAttrsAndChildren.GetSafeChildAt(aIndex); - NS_ASSERTION(oldKid == GetChildAt_Deprecated(aIndex), "Unexpected child in RemoveChildAt_Deprecated"); - - if (oldKid) { - doRemoveChildAt(aIndex, aNotify, oldKid, mAttrsAndChildren); - } -} - void FragmentOrElement::RemoveChildNode(nsIContent* aKid, bool aNotify) { diff --git a/dom/base/FragmentOrElement.h b/dom/base/FragmentOrElement.h index 03795a2e6c61..6e35b5a33eee 100644 --- a/dom/base/FragmentOrElement.h +++ b/dom/base/FragmentOrElement.h @@ -98,9 +98,6 @@ public: virtual int32_t ComputeIndexOf(const nsINode* aPossibleChild) const override; virtual nsresult InsertChildBefore(nsIContent* aKid, nsIContent* aBeforeThis, bool aNotify) override; - virtual nsresult InsertChildAt_Deprecated(nsIContent* aKid, uint32_t aIndex, - bool aNotify) override; - virtual void RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) override; virtual void RemoveChildNode(nsIContent* aKid, bool aNotify) override; virtual void GetTextContentInternal(nsAString& aTextContent, mozilla::OOMReporter& aError) override; diff --git a/dom/base/nsDocument.cpp b/dom/base/nsDocument.cpp index b6409763b873..d3f455237972 100644 --- a/dom/base/nsDocument.cpp +++ b/dom/base/nsDocument.cpp @@ -4109,46 +4109,6 @@ nsIDocument::InsertChildBefore(nsIContent* aKid, return doInsertChildAt(aKid, index, aNotify, mChildren); } -nsresult -nsIDocument::InsertChildAt_Deprecated(nsIContent* aKid, - uint32_t aIndex, - bool aNotify) -{ - if (aKid->IsElement() && GetRootElement()) { - NS_WARNING("Inserting root element when we already have one"); - return NS_ERROR_DOM_HIERARCHY_REQUEST_ERR; - } - - return doInsertChildAt(aKid, aIndex, aNotify, mChildren); -} - -void -nsIDocument::RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) -{ - nsCOMPtr oldKid = GetChildAt_Deprecated(aIndex); - if (!oldKid) { - return; - } - - if (oldKid->IsElement()) { - // Destroy the link map up front before we mess with the child list. - DestroyElementMaps(); - } - - // Preemptively clear mCachedRootElement, since we may be about to remove it - // from our child list, and we don't want to return this maybe-obsolete value - // from any GetRootElement() calls that happen inside of doRemoveChildAt(). - // (NOTE: for this to be useful, doRemoveChildAt() must NOT trigger any - // GetRootElement() calls until after it's removed the child from mChildren. - // Any call before that point would restore this soon-to-be-obsolete cached - // answer, and our clearing here would be fruitless.) - mCachedRootElement = nullptr; - doRemoveChildAt(aIndex, aNotify, oldKid, mChildren); - MOZ_ASSERT(mCachedRootElement != oldKid, - "Stale pointer in mCachedRootElement, after we tried to clear it " - "(maybe somebody called GetRootElement() too early?)"); -} - void nsIDocument::RemoveChildNode(nsIContent* aKid, bool aNotify) { diff --git a/dom/base/nsIDocument.h b/dom/base/nsIDocument.h index cb02e9be82f9..fbb209f51264 100644 --- a/dom/base/nsIDocument.h +++ b/dom/base/nsIDocument.h @@ -548,9 +548,6 @@ public: nsresult InsertChildBefore(nsIContent* aKid, nsIContent* aBeforeThis, bool aNotify) override; - nsresult InsertChildAt_Deprecated(nsIContent* aKid, uint32_t aIndex, - bool aNotify) override; - void RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) final; void RemoveChildNode(nsIContent* aKid, bool aNotify) final; nsresult Clone(mozilla::dom::NodeInfo* aNodeInfo, nsINode **aResult, diff --git a/dom/base/nsINode.cpp b/dom/base/nsINode.cpp index 766e6e27ed80..c8ea6f6069b4 100644 --- a/dom/base/nsINode.cpp +++ b/dom/base/nsINode.cpp @@ -533,7 +533,7 @@ nsINode::GetNodeValueInternal(nsAString& aNodeValue) nsINode* nsINode::RemoveChild(nsINode& aOldChild, ErrorResult& aError) { - if (IsCharacterData()) { + if (!aOldChild.IsContent()) { // aOldChild can't be one of our children. aError.Throw(NS_ERROR_DOM_NOT_FOUND_ERR); return nullptr; @@ -543,14 +543,16 @@ nsINode::RemoveChild(nsINode& aOldChild, ErrorResult& aError) nsContentUtils::MaybeFireNodeRemoved(&aOldChild, this); } - int32_t index = ComputeIndexOf(&aOldChild); - if (index == -1) { + // Check again, we may not be the child's parent anymore. + // Can be triggered by dom/base/crashtests/293388-1.html + if (aOldChild.AsContent()->IsRootOfAnonymousSubtree() || + aOldChild.GetParentNode() != this) { // aOldChild isn't one of our children. aError.Throw(NS_ERROR_DOM_NOT_FOUND_ERR); return nullptr; } - RemoveChildAt_Deprecated(index, true); + RemoveChildNode(aOldChild.AsContent(), true); return &aOldChild; } @@ -640,7 +642,7 @@ nsINode::Normalize() "Should always have a parent unless " "mutation events messed us up"); if (parent) { - parent->RemoveChildAt_Deprecated(parent->ComputeIndexOf(node), true); + parent->RemoveChildNode(node, true); } } } @@ -1997,11 +1999,12 @@ nsINode::ReplaceOrInsertBefore(bool aReplace, nsINode* aNewChild, } // Record the node to insert before, if any - nsINode* nodeToInsertBefore; + nsIContent* nodeToInsertBefore; if (aReplace) { nodeToInsertBefore = aRefChild->GetNextSibling(); } else { - nodeToInsertBefore = aRefChild; + // Since aRefChild is our child, it must be an nsIContent object. + nodeToInsertBefore = aRefChild ? aRefChild->AsContent() : nullptr; } if (nodeToInsertBefore == aNewChild) { // We're going to remove aNewChild from its parent, so use its next sibling @@ -2015,14 +2018,6 @@ nsINode::ReplaceOrInsertBefore(bool aReplace, nsINode* aNewChild, nsIContent* newContent = aNewChild->AsContent(); nsCOMPtr oldParent = newContent->GetParentNode(); if (oldParent) { - int32_t removeIndex = oldParent->ComputeIndexOf(newContent); - if (removeIndex < 0) { - // newContent is anonymous. We can't deal with this, so just bail - NS_ERROR("How come our flags didn't catch this?"); - aError.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR); - return nullptr; - } - // Hold a strong ref to nodeToInsertBefore across the removal of newContent nsCOMPtr kungFuDeathGrip = nodeToInsertBefore; @@ -2034,11 +2029,14 @@ nsINode::ReplaceOrInsertBefore(bool aReplace, nsINode* aNewChild, { mozAutoDocUpdate batch(newContent->GetComposedDoc(), true); nsAutoMutationBatch mb(oldParent, true, true); - oldParent->RemoveChildAt_Deprecated(removeIndex, true); + // ScriptBlocker ensures previous and next stay alive. + nsIContent* previous = aNewChild->GetPreviousSibling(); + nsIContent* next = aNewChild->GetNextSibling(); + oldParent->RemoveChildNode(aNewChild->AsContent(), true); if (nsAutoMutationBatch::GetCurrentBatch() == &mb) { mb.RemovalDone(); - mb.SetPrevSibling(oldParent->GetChildAt_Deprecated(removeIndex - 1)); - mb.SetNextSibling(oldParent->GetChildAt_Deprecated(removeIndex)); + mb.SetPrevSibling(previous); + mb.SetNextSibling(next); } } @@ -2077,7 +2075,7 @@ nsINode::ReplaceOrInsertBefore(bool aReplace, nsINode* aNewChild, if (aReplace) { nodeToInsertBefore = aRefChild->GetNextSibling(); } else { - nodeToInsertBefore = aRefChild; + nodeToInsertBefore = aRefChild ? aRefChild->AsContent() : nullptr; } } } @@ -2112,8 +2110,8 @@ nsINode::ReplaceOrInsertBefore(bool aReplace, nsINode* aNewChild, mozAutoDocUpdate batch(newContent->GetComposedDoc(), true); nsAutoMutationBatch mb(newContent, false, true); - for (uint32_t i = count; i > 0;) { - newContent->RemoveChildAt_Deprecated(--i, true); + while (newContent->HasChildren()) { + newContent->RemoveChildNode(newContent->GetLastChild(), true); } } @@ -2151,7 +2149,8 @@ nsINode::ReplaceOrInsertBefore(bool aReplace, nsINode* aNewChild, if (aReplace) { nodeToInsertBefore = aRefChild->GetNextSibling(); } else { - nodeToInsertBefore = aRefChild; + // If aRefChild has 'this' as a parent, it must be an nsIContent. + nodeToInsertBefore = aRefChild ? aRefChild->AsContent() : nullptr; } // And verify that newContent is still allowed as our child. Sadly, we @@ -2182,23 +2181,6 @@ nsINode::ReplaceOrInsertBefore(bool aReplace, nsINode* aNewChild, mozAutoDocUpdate batch(GetComposedDoc(), true); nsAutoMutationBatch mb; - // Figure out which index we want to insert at. Note that we use - // nodeToInsertBefore to determine this, because it's possible that - // aRefChild == aNewChild, in which case we just removed it from the - // parent list. - int32_t insPos; - if (nodeToInsertBefore) { - insPos = ComputeIndexOf(nodeToInsertBefore); - if (insPos < 0) { - // XXXbz How the heck would _that_ happen, exactly? - aError.Throw(NS_ERROR_DOM_NOT_FOUND_ERR); - return nullptr; - } - } - else { - insPos = GetChildCount(); - } - // If we're replacing and we haven't removed aRefChild yet, do so now if (aReplace && aRefChild != aNewChild) { mb.Init(this, true, true); @@ -2208,11 +2190,11 @@ nsINode::ReplaceOrInsertBefore(bool aReplace, nsINode* aNewChild, NS_ASSERTION(aRefChild->GetNextSibling() == nodeToInsertBefore, "Unexpected nodeToInsertBefore"); - // An since nodeToInsertBefore is at index insPos, we want to remove - // at the previous index. - NS_ASSERTION(insPos >= 1, "insPos too small"); - RemoveChildAt_Deprecated(insPos-1, true); - --insPos; + nsIContent* toBeRemoved = nodeToInsertBefore ? + nodeToInsertBefore->GetPreviousSibling() : GetLastChild(); + MOZ_ASSERT(toBeRemoved); + + RemoveChildNode(toBeRemoved, true); } // Move new child over to our document if needed. Do this after removing @@ -2246,8 +2228,9 @@ nsINode::ReplaceOrInsertBefore(bool aReplace, nsINode* aNewChild, nsAutoMutationBatch* mutationBatch = nsAutoMutationBatch::GetCurrentBatch(); if (mutationBatch) { mutationBatch->RemovalDone(); - mutationBatch->SetPrevSibling(GetChildAt_Deprecated(insPos - 1)); - mutationBatch->SetNextSibling(GetChildAt_Deprecated(insPos)); + mutationBatch->SetPrevSibling(nodeToInsertBefore ? + nodeToInsertBefore->GetPreviousSibling() : GetLastChild()); + mutationBatch->SetNextSibling(nodeToInsertBefore); } uint32_t count = fragChildren->Length(); @@ -2255,16 +2238,16 @@ nsINode::ReplaceOrInsertBefore(bool aReplace, nsINode* aNewChild, return result; } - bool appending = !IsDocument() && uint32_t(insPos) == GetChildCount(); + bool appending = !IsDocument() && !nodeToInsertBefore; nsIContent* firstInsertedContent = fragChildren->ElementAt(0); // Iterate through the fragment's children, and insert them in the new // parent - for (uint32_t i = 0; i < count; ++i, ++insPos) { + for (uint32_t i = 0; i < count; ++i) { // XXXbz how come no reparenting here? That seems odd... // Insert the child. - aError = InsertChildAt_Deprecated(fragChildren->ElementAt(i), insPos, - !appending); + aError = InsertChildBefore(fragChildren->ElementAt(i), nodeToInsertBefore, + !appending); if (aError.Failed()) { // Make sure to notify on any children that we did succeed to insert if (appending && i != 0) { @@ -2300,13 +2283,13 @@ nsINode::ReplaceOrInsertBefore(bool aReplace, nsINode* aNewChild, // We need to reparent here for nodes for which the parent of their // wrapper is not the wrapper for their ownerDocument (XUL elements, // form controls, ...). Also applies in the fragment code above. - if (nsAutoMutationBatch::GetCurrentBatch() == &mb) { mb.RemovalDone(); - mb.SetPrevSibling(GetChildAt_Deprecated(insPos - 1)); - mb.SetNextSibling(GetChildAt_Deprecated(insPos)); + mb.SetPrevSibling(nodeToInsertBefore ? + nodeToInsertBefore->GetPreviousSibling() : GetLastChild()); + mb.SetNextSibling(nodeToInsertBefore); } - aError = InsertChildAt_Deprecated(newContent, insPos, true); + aError = InsertChildBefore(newContent, nodeToInsertBefore, true); if (aError.Failed()) { return nullptr; } diff --git a/dom/base/nsINode.h b/dom/base/nsINode.h index e7fdc9e856f9..02c9e01b273e 100644 --- a/dom/base/nsINode.h +++ b/dom/base/nsINode.h @@ -821,29 +821,6 @@ public: virtual nsresult InsertChildBefore(nsIContent* aKid, nsIContent* aBeforeThis, bool aNotify) = 0; - /** - * Insert a content node at a particular index. This method handles calling - * BindToTree on the child appropriately. - * - * @param aKid the content to insert - * @param aIndex the index it is being inserted at (the index it will have - * after it is inserted) - * @param aNotify whether to notify the document (current document for - * nsIContent, and |this| for nsIDocument) that the insert has - * occurred - * - * @throws NS_ERROR_DOM_HIERARCHY_REQUEST_ERR if one attempts to have more - * than one element node as a child of a document. Doing this will also - * assert -- you shouldn't be doing it! Check with - * nsIDocument::GetRootElement() first if you're not sure. Apart from this - * one constraint, this doesn't do any checking on whether aKid is a valid - * child of |this|. - * - * @throws NS_ERROR_OUT_OF_MEMORY in some cases (from BindToTree). - */ - virtual nsresult InsertChildAt_Deprecated(nsIContent* aKid, uint32_t aIndex, - bool aNotify) = 0; - /** * Append a content node to the end of the child list. This method handles * calling BindToTree on the child appropriately. @@ -864,25 +841,9 @@ public: */ nsresult AppendChildTo(nsIContent* aKid, bool aNotify) { - return InsertChildAt_Deprecated(aKid, GetChildCount(), aNotify); + return InsertChildBefore(aKid, nullptr, aNotify); } - /** - * NOTE: this function is going to be removed soon (hopefully!) Don't use it - * in new code. - * - * Remove a child from this node. This method handles calling UnbindFromTree - * on the child appropriately. - * - * @param aIndex the index of the child to remove - * @param aNotify whether to notify the document (current document for - * nsIContent, and |this| for nsIDocument) that the remove has - * occurred - * - * Note: If there is no child at aIndex, this method will simply do nothing. - */ - virtual void RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) = 0; - /** * Remove a child from this node. This method handles calling UnbindFromTree * on the child appropriately. diff --git a/dom/html/HTMLFieldSetElement.cpp b/dom/html/HTMLFieldSetElement.cpp index fd50146f5e28..152881bc76d2 100644 --- a/dom/html/HTMLFieldSetElement.cpp +++ b/dom/html/HTMLFieldSetElement.cpp @@ -171,64 +171,6 @@ HTMLFieldSetElement::InsertChildBefore(nsIContent* aChild, return rv; } -nsresult -HTMLFieldSetElement::InsertChildAt_Deprecated(nsIContent* aChild, - uint32_t aIndex, - bool aNotify) -{ - bool firstLegendHasChanged = false; - - if (aChild->IsHTMLElement(nsGkAtoms::legend)) { - if (!mFirstLegend) { - mFirstLegend = aChild; - // We do not want to notify the first time mFirstElement is set. - } else { - // If mFirstLegend is before aIndex, we do not change it. - // Otherwise, mFirstLegend is now aChild. - if (int32_t(aIndex) <= ComputeIndexOf(mFirstLegend)) { - mFirstLegend = aChild; - firstLegendHasChanged = true; - } - } - } - - nsresult rv = - nsGenericHTMLFormElement::InsertChildAt_Deprecated(aChild, aIndex, aNotify); - NS_ENSURE_SUCCESS(rv, rv); - - if (firstLegendHasChanged) { - NotifyElementsForFirstLegendChange(aNotify); - } - - return rv; -} - -void -HTMLFieldSetElement::RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) -{ - bool firstLegendHasChanged = false; - - if (mFirstLegend && (GetChildAt_Deprecated(aIndex) == mFirstLegend)) { - // If we are removing the first legend we have to found another one. - nsIContent* child = mFirstLegend->GetNextSibling(); - mFirstLegend = nullptr; - firstLegendHasChanged = true; - - for (; child; child = child->GetNextSibling()) { - if (child->IsHTMLElement(nsGkAtoms::legend)) { - mFirstLegend = child; - break; - } - } - } - - nsGenericHTMLFormElement::RemoveChildAt_Deprecated(aIndex, aNotify); - - if (firstLegendHasChanged) { - NotifyElementsForFirstLegendChange(aNotify); - } -} - void HTMLFieldSetElement::RemoveChildNode(nsIContent* aKid, bool aNotify) { diff --git a/dom/html/HTMLFieldSetElement.h b/dom/html/HTMLFieldSetElement.h index a9d98608aa24..5146219a4506 100644 --- a/dom/html/HTMLFieldSetElement.h +++ b/dom/html/HTMLFieldSetElement.h @@ -42,9 +42,6 @@ public: virtual nsresult InsertChildBefore(nsIContent* aChild, nsIContent* aBeforeThis, bool aNotify) override; - virtual nsresult InsertChildAt_Deprecated(nsIContent* aChild, uint32_t aIndex, - bool aNotify) override; - virtual void RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) override; virtual void RemoveChildNode(nsIContent* aKid, bool aNotify) override; // nsIFormControl diff --git a/dom/html/HTMLOptGroupElement.cpp b/dom/html/HTMLOptGroupElement.cpp index c3002dea9314..6792647195c9 100644 --- a/dom/html/HTMLOptGroupElement.cpp +++ b/dom/html/HTMLOptGroupElement.cpp @@ -86,28 +86,6 @@ HTMLOptGroupElement::InsertChildBefore(nsIContent* aKid, return rv; } -nsresult -HTMLOptGroupElement::InsertChildAt_Deprecated(nsIContent* aKid, - uint32_t aIndex, - bool aNotify) -{ - SafeOptionListMutation safeMutation(GetSelect(), this, aKid, aIndex, aNotify); - nsresult rv = nsGenericHTMLElement::InsertChildAt_Deprecated(aKid, aIndex, - aNotify); - if (NS_FAILED(rv)) { - safeMutation.MutationFailed(); - } - return rv; -} - -void -HTMLOptGroupElement::RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) -{ - SafeOptionListMutation safeMutation(GetSelect(), this, nullptr, aIndex, - aNotify); - nsGenericHTMLElement::RemoveChildAt_Deprecated(aIndex, aNotify); -} - void HTMLOptGroupElement::RemoveChildNode(nsIContent* aKid, bool aNotify) { diff --git a/dom/html/HTMLOptGroupElement.h b/dom/html/HTMLOptGroupElement.h index 0784eb95fa5c..4c239853fe90 100644 --- a/dom/html/HTMLOptGroupElement.h +++ b/dom/html/HTMLOptGroupElement.h @@ -28,9 +28,6 @@ public: // nsINode virtual nsresult InsertChildBefore(nsIContent* aKid, nsIContent* aBeforeThis, bool aNotify) override; - virtual nsresult InsertChildAt_Deprecated(nsIContent* aKid, uint32_t aIndex, - bool aNotify) override; - virtual void RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) override; virtual void RemoveChildNode(nsIContent* aKid, bool aNotify) override; // nsIContent diff --git a/dom/html/HTMLPictureElement.cpp b/dom/html/HTMLPictureElement.cpp index 98d846e78893..7f172aa27b8f 100644 --- a/dom/html/HTMLPictureElement.cpp +++ b/dom/html/HTMLPictureElement.cpp @@ -30,32 +30,6 @@ HTMLPictureElement::~HTMLPictureElement() NS_IMPL_ELEMENT_CLONE(HTMLPictureElement) -void -HTMLPictureElement::RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) -{ - nsCOMPtr child = GetChildAt_Deprecated(aIndex); - - if (child && child->IsHTMLElement(nsGkAtoms::img)) { - HTMLImageElement* img = HTMLImageElement::FromNode(child); - if (img) { - img->PictureSourceRemoved(child->AsContent()); - } - } else if (child && child->IsHTMLElement(nsGkAtoms::source)) { - // Find all img siblings after this to notify them of its demise - nsCOMPtr nextSibling = child->GetNextSibling(); - if (nextSibling && nextSibling->GetParentNode() == this) { - do { - HTMLImageElement* img = HTMLImageElement::FromNode(nextSibling); - if (img) { - img->PictureSourceRemoved(child->AsContent()); - } - } while ( (nextSibling = nextSibling->GetNextSibling()) ); - } - } - - nsGenericHTMLElement::RemoveChildAt_Deprecated(aIndex, aNotify); -} - void HTMLPictureElement::RemoveChildNode(nsIContent* aKid, bool aNotify) { @@ -111,35 +85,6 @@ HTMLPictureElement::InsertChildBefore(nsIContent* aKid, nsIContent* aBeforeThis, return rv; } -nsresult -HTMLPictureElement::InsertChildAt_Deprecated(nsIContent* aKid, uint32_t aIndex, bool aNotify) -{ - nsresult rv = nsGenericHTMLElement::InsertChildAt_Deprecated(aKid, aIndex, aNotify); - - NS_ENSURE_SUCCESS(rv, rv); - NS_ENSURE_TRUE(aKid, rv); - - if (aKid->IsHTMLElement(nsGkAtoms::img)) { - HTMLImageElement* img = HTMLImageElement::FromNode(aKid); - if (img) { - img->PictureSourceAdded(aKid->AsContent()); - } - } else if (aKid->IsHTMLElement(nsGkAtoms::source)) { - // Find all img siblings after this to notify them of its insertion - nsCOMPtr nextSibling = aKid->GetNextSibling(); - if (nextSibling && nextSibling->GetParentNode() == this) { - do { - HTMLImageElement* img = HTMLImageElement::FromNode(nextSibling); - if (img) { - img->PictureSourceAdded(aKid->AsContent()); - } - } while ( (nextSibling = nextSibling->GetNextSibling()) ); - } - } - - return rv; -} - JSObject* HTMLPictureElement::WrapNode(JSContext* aCx, JS::Handle aGivenProto) { diff --git a/dom/html/HTMLPictureElement.h b/dom/html/HTMLPictureElement.h index 2b6ec48702dc..56c9321dd9d0 100644 --- a/dom/html/HTMLPictureElement.h +++ b/dom/html/HTMLPictureElement.h @@ -23,12 +23,9 @@ public: virtual nsresult Clone(mozilla::dom::NodeInfo* aNodeInfo, nsINode** aResult, bool aPreallocateChildren) const override; - virtual void RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) override; virtual void RemoveChildNode(nsIContent* aKid, bool aNotify) override; virtual nsresult InsertChildBefore(nsIContent* aKid, nsIContent* aBeforeThis, bool aNotify) override; - virtual nsresult InsertChildAt_Deprecated(nsIContent* aKid, uint32_t aIndex, - bool aNotify) override; protected: virtual ~HTMLPictureElement(); diff --git a/dom/html/HTMLSelectElement.cpp b/dom/html/HTMLSelectElement.cpp index 8a7cee162f9f..7a7bf0a9bcda 100644 --- a/dom/html/HTMLSelectElement.cpp +++ b/dom/html/HTMLSelectElement.cpp @@ -217,28 +217,6 @@ HTMLSelectElement::InsertChildBefore(nsIContent* aKid, return rv; } -nsresult -HTMLSelectElement::InsertChildAt_Deprecated(nsIContent* aKid, - uint32_t aIndex, - bool aNotify) -{ - SafeOptionListMutation safeMutation(this, this, aKid, aIndex, aNotify); - nsresult rv = - nsGenericHTMLFormElementWithState::InsertChildAt_Deprecated(aKid, aIndex, - aNotify); - if (NS_FAILED(rv)) { - safeMutation.MutationFailed(); - } - return rv; -} - -void -HTMLSelectElement::RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) -{ - SafeOptionListMutation safeMutation(this, this, nullptr, aIndex, aNotify); - nsGenericHTMLFormElementWithState::RemoveChildAt_Deprecated(aIndex, aNotify); -} - void HTMLSelectElement::RemoveChildNode(nsIContent* aKid, bool aNotify) { diff --git a/dom/html/HTMLSelectElement.h b/dom/html/HTMLSelectElement.h index 8945ddbdf404..27f448ff83ab 100644 --- a/dom/html/HTMLSelectElement.h +++ b/dom/html/HTMLSelectElement.h @@ -247,9 +247,6 @@ public: virtual bool IsHTMLFocusable(bool aWithMouse, bool* aIsFocusable, int32_t* aTabIndex) override; virtual nsresult InsertChildBefore(nsIContent* aKid, nsIContent* aBeforeThis, bool aNotify) override; - virtual nsresult InsertChildAt_Deprecated(nsIContent* aKid, uint32_t aIndex, - bool aNotify) override; - virtual void RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) override; virtual void RemoveChildNode(nsIContent* aKid, bool aNotify) override; // Overriden nsIFormControl methods diff --git a/dom/svg/SVGDocument.cpp b/dom/svg/SVGDocument.cpp index cd65c062b2ab..16b1ad48b271 100644 --- a/dom/svg/SVGDocument.cpp +++ b/dom/svg/SVGDocument.cpp @@ -50,23 +50,6 @@ SVGDocument::InsertChildBefore(nsIContent* aKid, nsIContent* aBeforeThis, return XMLDocument::InsertChildBefore(aKid, aBeforeThis, aNotify); } -nsresult -SVGDocument::InsertChildAt_Deprecated(nsIContent* aKid, uint32_t aIndex, - bool aNotify) -{ - if (aKid->IsElement() && !aKid->IsSVGElement()) { - // We can get here when well formed XML with a non-SVG root element is - // served with the SVG MIME type, for example. In that case we need to load - // the non-SVG UA sheets or else we can get bugs like bug 1016145. Note - // that we have to do this _before_ the - // XMLDocument::InsertChildAt_Deprecated call, since that can try to - // construct frames, and we need to have the sheets loaded by then. - EnsureNonSVGUserAgentStyleSheetsLoaded(); - } - - return XMLDocument::InsertChildAt_Deprecated(aKid, aIndex, aNotify); -} - nsresult SVGDocument::Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult, bool aPreallocateChildren) const diff --git a/dom/svg/SVGDocument.h b/dom/svg/SVGDocument.h index 4e8907799b6d..f91e27908b98 100644 --- a/dom/svg/SVGDocument.h +++ b/dom/svg/SVGDocument.h @@ -35,8 +35,6 @@ public: virtual nsresult InsertChildBefore(nsIContent* aKid, nsIContent* aBeforeThis, bool aNotify) override; - virtual nsresult InsertChildAt_Deprecated(nsIContent* aKid, uint32_t aIndex, - bool aNotify) override; virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult, bool aPreallocateChildren) const override; diff --git a/dom/svg/SVGSwitchElement.cpp b/dom/svg/SVGSwitchElement.cpp index 6b5491dcc897..258964467393 100644 --- a/dom/svg/SVGSwitchElement.cpp +++ b/dom/svg/SVGSwitchElement.cpp @@ -93,26 +93,6 @@ SVGSwitchElement::InsertChildBefore(nsIContent* aKid, nsIContent* aBeforeThis, return rv; } -nsresult -SVGSwitchElement::InsertChildAt_Deprecated(nsIContent* aKid, - uint32_t aIndex, - bool aNotify) -{ - nsresult rv = SVGSwitchElementBase::InsertChildAt_Deprecated(aKid, aIndex, - aNotify); - if (NS_SUCCEEDED(rv)) { - MaybeInvalidate(); - } - return rv; -} - -void -SVGSwitchElement::RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) -{ - SVGSwitchElementBase::RemoveChildAt_Deprecated(aIndex, aNotify); - MaybeInvalidate(); -} - void SVGSwitchElement::RemoveChildNode(nsIContent* aKid, bool aNotify) { diff --git a/dom/svg/SVGSwitchElement.h b/dom/svg/SVGSwitchElement.h index 05d1e2db856f..2daa17fabf8f 100644 --- a/dom/svg/SVGSwitchElement.h +++ b/dom/svg/SVGSwitchElement.h @@ -42,9 +42,6 @@ public: // nsINode virtual nsresult InsertChildBefore(nsIContent* aKid, nsIContent* aBeforeThis, bool aNotify) override; - virtual nsresult InsertChildAt_Deprecated(nsIContent* aKid, uint32_t aIndex, - bool aNotify) override; - virtual void RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) override; virtual void RemoveChildNode(nsIContent* aKid, bool aNotify) override; // nsIContent diff --git a/dom/xul/nsXULElement.cpp b/dom/xul/nsXULElement.cpp index 4fe260649fe8..0fb5efc0a840 100644 --- a/dom/xul/nsXULElement.cpp +++ b/dom/xul/nsXULElement.cpp @@ -827,103 +827,6 @@ nsXULElement::UnbindFromTree(bool aDeep, bool aNullParent) nsStyledElement::UnbindFromTree(aDeep, aNullParent); } -void -nsXULElement::RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) -{ - nsCOMPtr oldKid = mAttrsAndChildren.GetSafeChildAt(aIndex); - if (!oldKid) { - return; - } - - // On the removal of a , , or element, - // the possibility exists that some of the items in the removed subtree - // are selected (and therefore need to be deselected). We need to account for this. - nsCOMPtr controlElement; - nsCOMPtr listBox; - bool fireSelectionHandler = false; - - // -1 = do nothing, -2 = null out current item - // anything else = index to re-set as current - int32_t newCurrentIndex = -1; - - if (oldKid->NodeInfo()->Equals(nsGkAtoms::listitem, kNameSpaceID_XUL)) { - // This is the nasty case. We have (potentially) a slew of selected items - // and cells going away. - // First, retrieve the tree. - // Check first whether this element IS the tree - controlElement = do_QueryObject(this); - - // If it's not, look at our parent - if (!controlElement) - GetParentTree(getter_AddRefs(controlElement)); - nsCOMPtr controlContent(do_QueryInterface(controlElement)); - RefPtr xulElement = FromNodeOrNull(controlContent); - - if (xulElement) { - // Iterate over all of the items and find out if they are contained inside - // the removed subtree. - int32_t length; - controlElement->GetSelectedCount(&length); - for (int32_t i = 0; i < length; i++) { - nsCOMPtr item; - controlElement->MultiGetSelectedItem(i, getter_AddRefs(item)); - nsCOMPtr node = do_QueryInterface(item); - if (node == oldKid && - NS_SUCCEEDED(controlElement->RemoveItemFromSelection(item))) { - length--; - i--; - fireSelectionHandler = true; - } - } - - nsCOMPtr curItem; - controlElement->GetCurrentItem(getter_AddRefs(curItem)); - nsCOMPtr curNode = do_QueryInterface(curItem); - if (curNode && nsContentUtils::ContentIsDescendantOf(curNode, oldKid)) { - // Current item going away - nsCOMPtr box = xulElement->GetBoxObject(IgnoreErrors()); - listBox = do_QueryInterface(box); - if (listBox) { - listBox->GetIndexOfItem(oldKid->AsElement(), &newCurrentIndex); - } - - // If any of this fails, we'll just set the current item to null - if (newCurrentIndex == -1) - newCurrentIndex = -2; - } - } - } - - nsStyledElement::RemoveChildAt_Deprecated(aIndex, aNotify); - - if (newCurrentIndex == -2) { - controlElement->SetCurrentItem(nullptr); - } else if (newCurrentIndex > -1) { - // Make sure the index is still valid - int32_t treeRows; - listBox->GetRowCount(&treeRows); - if (treeRows > 0) { - newCurrentIndex = std::min((treeRows - 1), newCurrentIndex); - RefPtr newCurrentItem; - listBox->GetItemAtIndex(newCurrentIndex, getter_AddRefs(newCurrentItem)); - nsCOMPtr xulCurItem = do_QueryInterface(newCurrentItem); - if (xulCurItem) - controlElement->SetCurrentItem(xulCurItem); - } else { - controlElement->SetCurrentItem(nullptr); - } - } - - nsIDocument* doc; - if (fireSelectionHandler && (doc = GetComposedDoc())) { - nsContentUtils::DispatchTrustedEvent(doc, - static_cast(this), - NS_LITERAL_STRING("select"), - false, - true); - } -} - void nsXULElement::RemoveChildNode(nsIContent* aKid, bool aNotify) { diff --git a/dom/xul/nsXULElement.h b/dom/xul/nsXULElement.h index dbbc51f880b3..2019c9d9f55b 100644 --- a/dom/xul/nsXULElement.h +++ b/dom/xul/nsXULElement.h @@ -368,7 +368,6 @@ public: nsIContent* aBindingParent, bool aCompileEventHandlers) override; virtual void UnbindFromTree(bool aDeep, bool aNullParent) override; - virtual void RemoveChildAt_Deprecated(uint32_t aIndex, bool aNotify) override; virtual void RemoveChildNode(nsIContent* aKid, bool aNotify) override; virtual void DestroyContent() override;